jb.*_*jb. 30 java io design-patterns
最近我在求职面试时被问到这个问题,我无法回答.那么,java.io中最常用的模式是什么?它是如何使用的?常见的Java库中使用的其他模式有哪些?
pol*_*nts 31
BufferedReader等实现装饰模式.任何Reader,例如FileReader或者StringReader,都可以使用缓冲功能进行装饰,这实际上是源无关紧要的.
要添加其他人所说的内容,这些是Java库中的几个反模式:
从Effective Java 2nd Edition,Item 16:赞成组合而不是继承:
Java平台库中存在许多明显违反此原则的行为.例如,堆栈不是向量,因此
Stack不应该扩展Vector.类似地,属性列表不是哈希表,因此Properties不应该扩展Hashtable.在这两种情况下,组合物都是优选的.
从Effective Java 2nd Edition,第19项:仅使用接口来定义类型:
Java平台库中有几个常量接口,例如
java.io.ObjectStreamConstants.这些接口应视为异常,不应模拟.
从Effective Java 2nd Edition,第2项:在面对许多构造函数参数时考虑构建器(在线摘录):
传统上,程序员使用了伸缩构造函数模式,其中您只为所需的参数提供构造函数,另一个具有单个可选参数,第三个具有两个可选参数,等等[...]伸缩构造函数模式工作,但是当有很多参数时很难编写客户端代码,并且更难写入它.
当您面对许多构造函数参数时,第二种方法是JavaBeans模式,您可以在其中调用无参数构造函数来创建对象,然后调用setter方法来设置每个必需参数以及每个感兴趣的可选参数.[...]不幸的是,JavaBeans模式有其自身的严重缺点[...] JavaBean可能在其构造的中途处于不一致的状态[并且它]排除了使类不可变的可能性.
Bloch建议使用构建器模式.
And*_*s_D 24
我想他们想听听Decorator模式,它可以在各种Streams,Readers和Writers中找到.
其他图案(小选择):
我很确定可以找到Java SDK中此维基百科页面上列出的几乎所有模式的示例.
的装饰图案常常在Java I/O使用.
例
BufferedReader br = new BufferedReader(new FileReader("filename.txt"));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18265 次 |
| 最近记录: |