设计模式Gof分类23种,但在使用时人们常分为24种,其中简单工厂模式可以看做是工厂方法模式的一个特例,是一种编程习惯,故不算在Gof分的23种设计模式中。
设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,是一种解决问题的思路,可以适用于多个环境。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
模式应该有以下特点:
(1) 在特定的场景下有可重用性,对相同类型不同问题的环境,其解决方案都有效。
(2) 可传授性,即问题出现的机会很多,解决问题的方案相同,人们相对可以接受。
(3) 有表示模式的名称。
根据目的不同分类:分为创建型、结构性、行为型
创建型模式:是处理对象创建的设计模式,与对象创建有关,将对象实例化,这类模式都提供一种方法,将客户从所需实例化的对象中解耦。(耦合是指两个或两个以上的体系或两种运动形式间通过相互作用而彼此影响以至联合起来的现象。 解耦就是把程序中互相不相关或有限相关的模块分割开来)。创建型模式旨在将系统与它的对象创建、结合、表示的方式分离。这些设计模式在对象创建的类型、主体、方式、时间等方面提高了系统的灵活性。
结构型模式:可让你把类或对象组合到更大的结构中
行为型模式:描述类和对象如何交互及分配职责,行为型模式涉及到类和对象间的职责分配,不仅描述对象或类的模式,还描述它们之间的通信方式,刻划了运行时难以跟踪的复杂的控制流,它们将你的注意力从控制流转移到对象间的关系上来。行为型类模式采用继承机制在类间分派行为。
根据范围准则分:即指定的模式用于类还是用于对象,分为两种:类模式和对象模式
类模式:用于处理类和子类之间的关系,这些关系通过继承建立,是静态的,在编译时就已经确定下来了。因为从某种意义上说,几乎所有模式都是使用继承机制,因此此处的“类模式”是指集中处理类间关系的模式,只有很少部分模式属于此类。
对象模式:用于处理对象间的关系,这些关系具有动态性,在运行期间是可以变化的。
具体分类见下表
范围/目的 | 创建型(Creational) | 结构型(Structural) | 行为型(Behavioural) |
类 | 简单工厂 工厂方法模式 | 适配器模式(类) | 解释器模式 模板方法模式 |
对象 | 生成器模式 单例模式 原型模式 抽象工厂模式 | 适配器模式(对象) 桥接模式 组合模式 装饰模式 外观模式 享元模式 代理模式 | 责任链模式 命令模式 迭代器模式 中介者模式 备忘录模式 观察者模式 状态模式 策略模式 访问者模式 |