浅谈设计模式
什么是设计模式?
定义:设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解并且保证代码可靠性。
现在主要的有23种经典设计模型,当然不仅仅只有这23种,随着软件开发技术的发展,将会有越来越多的新模式不断诞生并得以应用。
设计模式一般包含模式名称、问题、目的、解决方案、效果等组成要素,其中关键要素是模式名称、问题、解决方案和效果。
模式名称通过一两个词来描述模式的问题、解决方案和效果,以便更好地理解模式并方便开发人员之间的交流,绝大多数模式都是根据其功能或模式结构来命名的(GoF设计模式中没有一个模式用人名命名);
问题(Problem)描述了应该在何时使用模式,它包含了设计中存在的问题以及问题存在的原因;
解决方案(Solution)描述了一个设计模式的组成成分,以及这些组成成分之间的相互关系,各自的职责和协作方式,通常解决方案通过UML类图和核心代码来进行描述;
效果(Consequences)描述了模式的优缺点以及在使用模式时应权衡的问题。
设计模式可分为
创建型(Creational):创建型模式主要用于描述如何创建对象
结构型(Structural):结构型模式主要用于描述如何实现类或对象的组合
行为型(Behavioral):行为型模式主要用于描述类或对象怎样交互以及怎样分配职责
在GoF23种设计模式中包含5种创建型设计模式、7种结构型设计模式和11种行为型设计模式。
根据处理关系来划分
用于处理类之间的关系:类模式
用于处理对象之间的关系:对象模式。
我们经常将两种分类方式结合使用,如单例模式是对象创建型模式,模板方法模式是类行为型模式。
常用设计模式一览表
类型 |
模式名称 |
学习难度 |
使用频率 |
创建型模式 Creational Pattern |
单例模式 Singleton Pattern |
★☆☆☆☆ |
★★★★☆ |
简单工厂模式 Simple Factory Pattern |
★★☆☆☆ |
★★★☆☆ |
|
工厂方法模式 Factory Method Pattern |
★★☆☆☆ |
★★★★★ |
|
抽象工厂模式 Abstract Factory Pattern |
★★★★☆ |
★★★★★ |
|
原型模式 Prototype Pattern |
★★★☆☆ |
★★★☆☆ |
|
建造者模式 Builder Pattern |
★★★★☆ |
★★☆☆☆ |
|
结构型模式 Structural Pattern |
适配器模式 Adapter Pattern |
★★☆☆☆ |
★★★★☆ |
桥接模式 Bridge Pattern |
★★★☆☆ |
★★★☆☆ |
|
组合模式 Composite Pattern |
★★★☆☆ |
★★★★☆ |
|
装饰模式 Decorator Pattern |
★★★☆☆ |
★★★☆☆ |
|
外观模式 Façade Pattern |
★☆☆☆☆ |
★★★★★ |
|
享元模式 Flyweight Pattern |
★★★★☆ |
★☆☆☆☆ |
|
代理模式 Proxy Pattern |
★★★☆☆ |
★★★★☆ |
|
行为型模式 Behavioral Pattern |
职责链模式 Chain of Responsibility Pattern |
★★★☆☆ |
★★☆☆☆ |
命令模式 Command Pattern |
★★★☆☆ |
★★★★☆ |
|
解释器模式 Interpreter Pattern |
★★★★★ |
★☆☆☆☆ |
|
迭代器模式 Iterator Pattern |
★★★☆☆ |
★★★★★ |
|
中介者模式 Mediator Pattern |
★★★☆☆ |
★★☆☆☆ |
|
备忘录模式 Memento Pattern |
★★☆☆☆ |
★★☆☆☆ |
|
观察者模式 Observer Pattern |
★★★☆☆ |
★★★★★ |
|
状态模式 State Pattern |
★★★☆☆ |
★★★☆☆ |
|
策略模式 Strategy Pattern |
★☆☆☆☆ |
★★★★☆ |
|
模板方法模式 Template Method Pattern |
★★☆☆☆ |
★★★☆☆ |
|
访问者模式 Visitor Pattern |
★★★★☆ |
★☆☆☆☆ |