我正在学习GoF Java设计模式,我希望看到它们的一些真实例子。 Java核心库中的这些设计模式有哪些很好的例子?
答案 0 :(得分:3053)
答案 1 :(得分:102)
Observable
,Observer
)ContainerAdapter
,ComponentAdapter
,FocusAdapter
,KeyAdapter
,MouseAdapter
不是适配器;它们实际上是Null Objects。 Sun的命名选择不佳。BufferedInputStream
可以装饰其他流,例如FilterInputStream
)java.lang.Runtime#getRuntime()
是Singleton ButtonGroup
for Mediator pattern Action
,AbstractAction
可用于不同的可视化表示以执行相同的代码 - >命令模式还有更多我想
答案 2 :(得分:48)
clone()
方法可以用于此目的。答案 3 :(得分:40)
RMI基于代理。
应该可以引用GoF中23种模式中的大多数模式:
我想不到23个中有10个用Java的例子,但我会明白我明天能否做得更好。这就是编辑的目的。
答案 4 :(得分:26)
抽象工厂模式用于各种场合。
例如,DatagramSocketImplFactory
,PreferencesFactory
。还有更多---在Javadoc中搜索名称中带有“Factory”字样的接口。
此外,还有很多工厂模式的实例。
答案 5 :(得分:21)
即使我是一个破坏时钟的人,Java XML API也经常使用Factory。我的意思是看看这个:
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(source);
String title = XPathFactory.newInstance().newXPath().evaluate("//title", doc);
......依此类推。
此外,各种Buffers(StringBuffer,ByteBuffer,StringBuilder)都使用Builder。
答案 6 :(得分:20)
java.util.Collection #teterator是工厂方法的一个很好的例子。根据您使用的Collection的具体子类,它将创建一个Iterator实现。因为Factory超类(Collection)和Iterator都是接口,所以它有时会与AbstractFactory混淆。在接受的答案(BalusC)中,AbstractFactory的大多数示例都是Factory的示例,它是Factory Method的简化版本,它不是原始GoF模式的一部分。在Facory中,工厂类层次结构已折叠,工厂使用其他方法选择要返回的产品。
抽象工厂有多个工厂方法,每个方法创建一个不同的产品。一家工厂生产的产品可以一起使用(您的打印机和墨盒最好来自同一个(抽象)工厂)。正如上面的答案中所提到的,不同平台的AWT GUI组件系列就是一个例子(虽然它的实现与Gof中描述的结构不同)。