What is the most used pattern in java.io?
我最近在面试中被问到这个问题,我没法回答。那么,java.io中最常用的模式是什么?它是如何使用的?常用Java库中使用的其他模式是什么?
java.util.Comparator 是一种战略模式。
反模式
为了补充其他人所说的,这些是Java库中的几种反模式:
反模式:继承而不是组合从有效的Java第二版,项目16:赞成作文比继承:
There are a number of obvious violations of this principle in the Java platform libraries. For example, a stack is not a vector, so
Stack should not extendVector . Similarly, a property list is not a hash table, soProperties should not extendHashtable . In both cases, composition would have been preferable.
相关问题
- 更喜欢组合而不是继承?
- Java继承与组成(实现堆栈)
- 继承与构成的区别
- 继承或组成:依赖于"is-a"和"has-a"?
- 面向对象的最佳实践-继承V组合V接口
- 我应该使用继承还是组合?
- 继承与聚合
- 聚合与组成
- 使用组合而不是继承的装饰图案
反模式:常量接口
从有效的Java第二版,项目19:仅使用接口定义类型:
There are several constant interfaces in the Java platform libraries, such as
java.io.ObjectStreamConstants . These interfaces should be regarded as anomalies and should not be emulated.
相关问题
- 类应该只实现常量接口吗?
- 在Java中实现常数的最佳方法是什么?
反模式:伸缩构造函数和JavaBeans模式
从有效的Java第二版,项目2:考虑建设者面临许多构造函数参数(摘录在线):
Traditionally, programmers have used the telescoping constructor pattern, in which you provide a constructor with only the required parameters, another with a single optional parameters, a third with two optional parameters, and so on [...] The telescoping constructor pattern works, but it is hard to write client code when there are many parameters, and harder still to write it.
A second alternative when you are faced with many constructor parameters is the JavaBeans pattern, in which you call a parameterless constructor to create the object, and then call setter methods to set each required parameter, and each optional parameter of interest. [...] Unfortunately the JavaBeans pattern has serious disadvantages of its own [...] a JavaBean may be in an inconsistent state partway through its construction [and it] precludes the possibility of making a class immutable.
Bloch建议使用构建器模式。
相关问题- 这是一个众所周知的设计模式吗?它叫什么名字?
- 建设者设计模式和工厂设计模式有什么区别?
- 您什么时候使用构建器模式?
我想他们想听听装饰图案,可以在各种各样的流、读者和作家中找到。
其他图案(小选择):
- Swing库中的观察者模式
- javax.xml.parsers包中的工厂模式
- 迭代器模式,在集合中使用
我敢肯定,我们可以在Java SDK中找到维基百科页面上列出的几乎所有模式的例子。
在Java I/O中经常使用装饰器模式。
例子
1 |
我想是装饰图案。创建各种类型的读卡器、编写器、输入和输出流。例如,请参见。
java.io包中使用的模式。
装饰图案。
实例:
抽象类java.io.filterinputstream及其具体子类:
抽象工厂模式和工厂方法模式:
实例:
抽象类inputstream及其具体的子类:
1 |
下面的类可以统一来自字节数组、文件、网络连接、持久存储、管道、字符串等的输入:
1 2 3 4 5 6 7 8 | class java.io.InputStream class java.io.ByteArrayInputStream class java.io.FileInputStream class java.io.FilterInputStream class java.io.ObjectInputStream class java.io.PipedInputStream class java.io.SequenceInputStream class java.io.StringBufferInputStream |
适配器图案:
实例:
您可以在本文中找到更多详细信息
模板方法模式(来源:JournalDev文章)
对于Java中的所有其他模式,请参阅以下文章:
Java核心库中GOF设计模式的实例