设计模式(Design Pattern)是一种设计软件时经常出现的问题的解决方案。在设计模式中,“模式”一词意味着应用程序开发中出现的问题往往很相似,并且可以同样使用解决方案。但是设计模式并不是所有问题的正确答案,最好是根据情况选择最佳模式来使用。
设计模式分类
GoF是设计模式的经典名著Design Patterns: Elements of Reusable Object-Oriented Software(中译本名为《设计模式——可复用面向对象软件的基础》)的四位作者,他们分为是:Elich Gamma、Richard Helm、Ralph Johnson、以及John Vlissides。这四个人常被称为Gang of Four, 即四人组,简称GoF。
创建型Creational模式 | 结构型Structural模式 | 行为型Behavioral模式 |
---|---|---|
抽象工厂模式(Abstract Factory) | 适配器模式(Adapter) | 职责链模式(Chain of Responsibility) |
生成器模式(Builder) | 桥接模式(Bridge) | 命令模式(Command) |
工厂方法模式(Factory Method) | 组合模式(Composite) | 解释器模式(Interpreter) |
原型模式(Prototype) | 装饰模式(Decorator) | 迭代器模式(Iterator) |
单例模式(Singleton) | 外观模式(Facade) | 中介者模式(Mediator) |
享元模式(Flyweight) | 备忘录模式(Menmento) | |
代理模式(Proxy) | 观察者模式(Observer) | |
状态模式(State) | ||
策略模式(Strategy) | ||
模板方法模式(Template Method) | ||
访问者模式(Visitor) |
创建型模式
- 这是创建对象时使用的模式,即使修改对象,调用部分也不会受到影响。
结构型模式
- 将物体组合起来,形成更大的结构。
行为型模式
- 对象之间的算法或责任分配模式。
- 使用多个对象来分配一个不能完成的任务。结合也需要考虑最小化。
创建型模式
- 抽象工厂:不指定具体类而提供界面生成符合情况的对象的模式。
- 生成器:将对象的生成和表现分离出来生成对象的模式。
- 工厂方法:将创建对象分离为子类并进行委任的模式。
- 原型:复制原始对象生成对象的模式。
- 单例:每个类只生成一个实例,以保证只有一个实例,并提供在任何地方都可以访问的模式。
结构型模式
- 适配器:将类的接口转换成预期的接口的模式。
- 桥接:将抽象画和实现分开,各自独立变形的模式。
- 组合:由多个对象组成的复合对象和单一对象在客户端中无区别地处理的模式。
- 装饰:通过对象的结合,可以动态、灵活地扩展功能的模式。
- 外观:一种模式,在子系统的接口集合中提供一个统一的接口。
- 享元:一个特定类的实例提供多个虚拟实例时使用的模式。
- 代理:不直接引用特定对象,而是通过代理(弗拉克西)对象访问的模式。
行为型模式
- 职责链:将责任连锁请求处理对象创建成集合,从而松散耦合的模式。
- 命令:封装命令可执行的可能性,并设计类来执行给定的各种可能。
- 解释器:为给定语言的语法定义表达手段,并解释相应语言构成的句子的模式。
- 迭代:在不暴露内部结构的情况下,提供了依次访问该对象的集合元素的方法。
- 中介者:是定义一个对象的模式,它将一个集合中的对象的相互作用胶囊化。
- 备忘录:保存对象的状态信息,根据需要恢复状态的模式。
- 观察者:观察对象状态变化的观察者,即把观察者目录登记到客体上,每当状态变化时,通过方法等让客体直接通知观察者的设计模式。
- 状态:根据状态,对象改变行为的模式。
- 策略:将行为封装成类,使其动态改变行为的模式。
- 模板方法:将处理一定任务的部分封装为子类,在不改变整体执行结构的情况下,只改变特定阶段执行的模式。
- 访问者:具有实际逻辑的对象访问并执行应用逻辑的对象的模式。