第一部分 接口型模式
1. Adapter(适配器)模式
Adapter模式的宗旨就是,保留现有类所提供的服务,向客户提供接口,以满足客户的期望。
1.1 接口适配
继承老类,实现新类,实现新类的方法里调用老类方法。
1.2 类和对象适配器
继承新类,老类当属性,继承新类方法里调用老类方法。
2. Facade(外观)模式
Facade模式的目的在于提供一个接口,使子系统更加容易使用。
把子系统的类重构为一个个目的明确的类,为了子系统便于使用,在子系统中顺带提供一些示例类或者外观类。
3. Composite(组合)模式
让用户用统一的接口处理对象以及对象组合。
4. Bridge(桥接)模式
将抽象与抽象方法的实现相分离,让他们可以独自变化。
把不同实现的方法移到一个新的Driver类中,然后把Driver类作为属性。
有名的例子:JDBC数据库驱动程序
第二部分 责任型模式
5. Singleton(单例)模式
确保某个类只有一个实例,并提供一个全局访问点。
实现方法一:将单例对象作为单例类的一个静态域创建实例。
private static Factory factory = new Factory();
public static Factory getFactory() {
if(factory == null) factory = new Factory();
return factory;
}
实现方法二(单例和线程):
private static Factory factory;
private static Object classLock = Factory.class;
public static Factory getFactory() {
synchronized(classLock) {
if(factory == null) factory = new Factory();
return factory;
}
}
6. Observer(观察者)模式
频繁用于GUI应用程序中。当一个对象状态改变时,所有依赖于这个对象的对象都能得到通知。
继承Observable,在方法中通过notifyObservers()通知观察者。
7. Mediator(中介者)模式
广泛用于GUI应用开发。将对象集合之间的交互封装起来,降低耦合程度,避免显式引用。
8. Proxy(代理)模式
为对象提供一个代理/占位来控制对对象的访问。
代理对象,实现InvocationHandler接口,实现invoke方法。
9. Chain of Responsibility(责任链)模式
让每个对象决定是否有机会处理请求。
10. Flyweight(享元)模式
共享的提取出来。
第三部分 构造型模式
11. Builder(生成器)模式
将复杂对象的构造逻辑从对象中分离出来。
从配置文件中读取字段,赋给一个bean一样的类,通过这个类来build一个对象。
12. Factory Method(工厂方法)模式
创建对象,控制对哪个类进行实例化,不需要具体知道初始化了哪个类,
http://www.jdon.com/designpatterns/designpattern_factory.htm
13. Abstract Factory(抽象工厂)模式
创建一系列相互关联或相互依赖的对象。GUI工具包就是一个抽象工厂。这个模式最经典的范例是“外观和感觉”系列——GUI控件族。
14. Prototype(原型)模式
不通过实例化来创建一个实例,通过复制一个现有对象来生成新的对象。
可以借助Object.clone()方法,但可能不是开发者想要的副本,进一步复制工作需要由开发者完成。
(是否是浅复制,即对象中的对象属性的对象没有复制?)
15. Memento(备忘录)模式
提供状态存储和状态恢复功能。最常用的用法是在应用程序中提供撤销操作。暂时的可以放在容器中,持久化可以放在文本文件中。
第四部分 操作型模式
16. Template Method(模板方法)模式
概念: 抽象出方法的框架,包括处理步骤或流程,子类给出具体的实现。
用处:在父类中规范流程,由子类去做不同的实现。
17. State(状态)模式
把状态有关的处理逻辑分散到代表对象状态的各个类中。
18. Strategy(策略)模式
可选的策略封装在不同的类中,并在这些类中实现一个共同的操作。
19. Command(命令)模式
把请求封装在对象里。
20. Interpreter(解释器)模式
第五部分 扩展型模式
21. Decorator(装饰器)模式
混合操作的不同变化。
22. Iterator(迭代器)模式
提供一个顺序访问集合元素的方法。
23. Visitor(访问者)模式
不修改现有类,定义类层次结构的新的操作。
保留最后行