本文适合读者:1.已经理解了23种设计模式意义的读者;2.为了方便记忆
前半句为这种设计模式的目的,后半句为可能使用的方法
创建型模式
0.简单工厂方法(Simple Factory Method):为了把创建实例的代码放到一起,用一个类进行封装(创建函数需指定具体类别)《Head First设计模式》中提到该模式
1.工厂方法(Factory Method):为了将创建与使用对象的代码分离开,编写创建函数并返回抽象类型
2.抽象工厂方法(Abstract Factory Method):为了创建多种抽象类型组合,提供多个创建方法返回不同的抽象类型
3.单例模式(Singleton):为了确保全局唯一的实例,将构造函数私有化并提供静态或全局的获取实例的方法
4.原型模式(Prototype):为了拷贝已存在的对象实例,将拷贝的细节隐藏并返回拷贝的对象
5.建造者模式(Builder)(又叫生成器模式):为了分离建造过程与细节(建造过程步骤确定,但每一步的实现细节是可变的),将每一步抽象成接口方法并最后返回创建的对象
结构型模式
6.适配器模式(Adapter):为了适配满足需要的变量、参数形式等,将已有功能作为入参(一般是已有类、变量列表、结构)进行适配动作
7.装饰模式(Decorator):为了扩展现有类并且不修改它,创建基类(有需要扩展的抽象方法)和继承旁支(有基类引用并实现抽象方法)
8.代理模式(Proxy):为了简化使用和实现访问控制,通过代理类屏蔽实现细节
9.外观模式(Facade):为了简化接口的调用,将需要的接口都汇总到一个接口
10.桥接模式(Bridge):为了应对被使用的功能其实现可能频繁变化并且存在多种实现,将易变部分分离并通过桥接连接
11.组合模式(Composite):为了组织不同类型对象间的层次结构并且统一地使用它们,创建基类并把它们放到一个结构里(如链表,向量等)
12.享元模式(Flyweight):为了减少重复对象的创建,使用缓存来共享对象
行为型模式
13.策略模式(Strategy):为了将各种算法的代码分离开来,将每种算法用子类实现
14.模板方法模式(Template Method):为了抽象不同数据类型的相同操作步骤,将这些操作定义为模板方法并定义不同数据类型的基类作为模板方法的参数
15.观察者模式(Observer)(又叫发布订阅模式):为了让订阅者能够知道数据发生变更,发布者将变更信息发送给每个订阅者
16.迭代器模式(Iterator):为了仅提供让外部迭代访问内部对象集的能力,将内部对象集合的组织结构隐藏而仅提供迭代访问的方法
17.责任链模式(Chain of Responsibility)为了将责任链上的各处理节点隐藏以及将不同处理节点代码分开,将责任链上的各处理节点用子类实现
18.命令模式(Command)为了将发送请求与接收请求的逻辑解耦,将请求封装为命令对象
19.备忘录模式(Memento ):为了能将该对象恢复到原先保存的状态,在对象之外保存该对象的状态
20.状态模式(State):为了实现内部状态发生改变时产生不同行为,引入状态类并隐藏状态转换细节且仅对外部保留行为接口
21.访问者模式(Visitor):为了隐藏内部的数据结构,对外提供方便使用的操作接口
22.中介者模式
23.解释器模式
过滤器模式(Filter、Criteria):为了筛选出需要的数据,将各筛选条件分别用子类实现