参考答案:

1. 创建型模式:

(1) 工厂模式:返回具体对象的方法。比如说:java.lang.Proxy#newProxyInstance();

(2) 抽象工厂模式:抽象工厂模式提供了一个协议来生成一系列的相关或者独立的对象,而不用指定具体对象的类型。简单地说,一个创建新对象的方法,返回的却是接口或者抽象类的,比如说:java.util.Calendar#getInstance();

(3) 单例模式:用来确保类只有一个实例。比如说:java.lang.Runtime#getRuntime();

(4) Builder 建造者模式:定义了一个新的类来构建另一个类的实例,以简化复杂对象的创建。建造模式通常也使用方法链接来实现。比如说:java.lang.StringBuilder#append();

(5) 原型模式:使得类的实例能够生成自身的拷贝。如果创建一个对象的实例非常复杂且耗时,就可以使用这种模式,而不重新创建一个新的实例,你可以拷贝一个对象并直接修改它。比如说:java.lang.Object#clone()

2. 结构型模式:

(1)适配器模式:用来把一个接口转化成另一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。比如说:java.util.Arrays#asList();

(2)装饰器模式:动态的给一个对象附加额外的功能,这也是子类的一种替代方式。可以看到,在创建一个类型的时候,同时也传入同一类型的对象。比如说:java.io.BufferedInputStream(InputStream);

(3) 代理模式:代理模式是用一个简单的对象来代替一个复杂的或者创建耗时的对象。比如说:java.lang.reflect.Proxy

(4) 外观模式:给一组组件,接口,抽象,或者子系统提供一个简单的接口。比如说:java.lang.Class;

(5)桥接模式:将抽象和实现进行了解耦,这样使得抽象和实现可以独立地变化。比如说 jdbc 的实现,java.sql.Driver

(6)组合模式:将对象组合成树状层次结构,使用户对单个对象和组合对象具有一致的访问性。简单地说,即某个类型的方法同时也接受自身类型作为参数。比如说:java.util.Map#putAll(Map);

(7)享元模式:运用共享技术(如缓存)来有效地支持大量细粒度对象的复用。比如说:java.lang.Integer#valueOf(int)

3. 行为型模式:

(1)策略模式:将一组算法封装成一系列对象。通过传递这些对象可以灵活的改变程序的功能。比如说:java.util.Comparator#compare()

(2)模板方法模式:让子类可以重写方法的一部分,而不是整个重写,你可以控制子类需要重写那些操作。比如说:java.util.Collections#sort()

(3)观察者模式:它使得一个对象可以灵活的将消息发送给感兴趣的对象。比如说 java.util.EventListener

(4)迭代器模式:提供一个一致的方法来顺序访问集合中的对象,这个方法与底层的集合的具体实现无关。比如说:java.util.Iterator

(5)责任链模式:通过把请求从一个对象传递到链条中下一个对象的方式,直到请求被处理完毕,以实现对象间的解耦。比如说:java.util.logging.Logger#log()

(6)命令模式:将操作封装到对象内,以便存储,传递和返回。比如说:java.lang.Runnable

(7)备忘录模式:生成对象状态的一个快照,以便对象可以恢复原始状态而不用暴露自身的内容。比如说,Date 对象通过自身内部的一个 long 值来实现备忘录模式。

(8)状态模式:通过改变对象内部的状态,使得你可以在运行时动态改变一个对象的行为。比如说:java.util.Iterator

(9)访问者模式:提供一个方便的可维护的方式来操作一组对象。它使得你在不改变操作的对象前提下,可以修改或者扩展对象的行为。比如说:javax.lang.model.element.Element and javax.lang.model.element.ElementVisitor

(10)中介者模式:通过使用一个中间对象来进行消息分发以及减少类之间的直接依赖。比如说 java.util.concurrent.Executor#execute()

(11)解释器模式:定义了一个语言的语法,然后解析相应语法的语句。比如说:java.util.Pattern