Java 核心库中的 GoF 设计模式示例

2022-08-31 04:08:07

我正在学习GoF Java设计模式,我想看到一些现实生活中的例子。在Java的核心库中,这些设计模式有哪些很好的例子?


答案 1

您可以在维基百科中找到许多设计模式的概述。它还提到了GoF提到的模式。我将在这里总结它们,并尝试分配尽可能多的模式实现,这些实现都可以在Java SE和Java EE API中找到。


创造模式

抽象工厂(可通过返回工厂本身的创建方法识别,而这些方法又可用于创建另一种抽象/接口类型)

生成器(可通过返回实例本身的创建方法识别)

工厂方法(可通过返回抽象/接口类型实现的创建方法识别)

原型(可通过创建方法识别,这些方法返回具有相同属性的不同自身实例)

单例(可通过每次返回相同实例(通常是自身)的创建方法识别)


结构模式

适配器(可通过创建方法识别,方法是采用不同抽象/接口类型的实例,并返回自己/另一个抽象/接口类型的实现,该实现修饰/覆盖给定实例)

Bridge(可通过创建方法识别,方法是采用不同抽象/接口类型的实例,并返回自己的抽象/接口类型的实现,该实现委托/使用给定的实例)

复合(可通过行为方法将相同抽象/接口类型的实例转换为树结构来识别)

装饰器(可通过创建方法识别,该方法采用相同抽象/接口类型的实例,从而添加其他行为)

立面(可通过行为方法识别,该方法在内部使用不同独立抽象/接口类型的实例)

Flyweight(可通过返回缓存实例的创建方法识别,有点像“多顿”的想法)

代理(可通过创建方法识别,该方法返回给定抽象/接口类型的实现,而该实现又委托/使用给定抽象/接口类型的不同实现)


行为模式

责任链(可通过行为方法识别,该方法(间接)在队列中相同抽象/接口类型的一个实现中调用相同的方法)

命令(可由抽象/接口类型中的行为方法识别,该方法调用不同抽象/接口类型的实现中的方法,该方法在创建期间已被命令实现封装

解释器(可通过行为方法识别,返回给定实例/类型的结构上不同的实例/类型;请注意,解析/格式化不是模式的一部分,确定模式以及如何应用它)

迭代器(可通过行为方法识别,按顺序从队列返回不同类型的实例)

中介器(可通过行为方法识别,这些方法采用不同抽象/接口类型(通常使用命令模式)的实例,这些实例委托/使用给定的实例)

Memento(可通过行为方法识别,这些方法在内部更改整个实例的状态

观察者(或发布/订阅)(可通过行为方法识别,该方法根据自己的状态在另一个抽象/接口类型的实例上调用方法)

状态(可通过行为方法识别,该方法根据实例的状态(可由外部控制)改变其行为)

策略(可通过抽象/接口类型中的行为方法识别,该方法在不同抽象/接口类型的实现中调用方法,该方法已作为方法参数传入策略实现)

模板方法(可通过行为方法识别,这些行为方法已经具有由抽象类型定义的“默认”行为)

访问者(可由两种不同的抽象/接口类型识别,其定义的方法相互采用其他抽象/接口类型;一个实际上调用另一个的方法,另一个在其上执行所需的策略)


答案 2
  1. 整个秋千的观察者模式(,ObservableObserver)
  2. MVC也在摇摆不定
  3. 适配器模式:InputStreamReader 和 OutputStreamWriter 注意:、 、 、 、 不是适配器;它们实际上是空对象。Sun的命名选择不佳。ContainerAdapterComponentAdapterFocusAdapterKeyAdapterMouseAdapter
  4. 装饰器模式(可以装饰其他流,例如BufferedInputStreamFilterInputStream)
  5. 摘要 AWT 工具包和 Swing 可插拔外观类的工厂模式
  6. java.lang.Runtime#getRuntime()是辛格尔顿
  7. ButtonGroup对于中介模式
  8. Action,可用于不同的可视表示来执行相同的代码 -> 命令模式AbstractAction
  9. JTable for Flyweight Pattern 中的 Interned Strings 或 CellRender(还考虑各种池 - 线程池、连接池、EJB 对象池 - Flyweight 实际上是关于共享资源的管理)
  10. Java 1.0 事件模型是责任链的一个例子,Servlet Filters 也是如此。
  11. 集合框架中的迭代器模式
  12. AWT/Swing 中的嵌套容器使用复合模式
  13. AWT/Swing 中的布局管理器是策略的一个例子

还有更多我想