引言
在上一篇 我们介绍了类设计原则(SOLID原则),
本篇将为您介绍常见的23种设计模式
在GOF的《设计模式:可复用面向对象软件的基础》
一书中 作者根据设计模式在粒度和抽象层次的不同将设计模式如下划分
创 建 型 | 结 构 型 | 行 为 型 | |
---|---|---|---|
类 | Factory Method | Adapter(类) | Interpreter Template Method |
对象 | Abstract Factory Builder Prototype Singleton |
Adapter(对象) Bridge Composite Decorator Facade Flyweight Proxy |
Chain of Responsibility Command Iterator Mediator Memento Observer State Strategy Visitor |
23种设计模式
1 创建型
1.1 Factory Method 工厂方法模式
在GOF的《设计模式:可复用面向对象软件的基础》中是这样说的:定义一个用于创建对象的接口,让子类决定实例化哪一个类。 Factory Method使一个类的 实例化延迟到其子类。
工厂方法模式是在简单工厂模式的基础上,对“工厂”添加了一个抽象层。将工厂共同的动作抽象出来,作为抽象类,而具体的行为由子类本身去实现,让子类去决定生产什么样的产品。
- 源码部分
|
|
- 调用部分
|
|
1.2 Abstract Factory 抽象工厂模式
在GOF的《设计模式:可复用面向对象软件的基础》中是这样说的:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
- 源码部分
|
|
- 调用部分
|
|
1.3 Builder 建造模式
在GOF的《设计模式:可复用面向对象软件的基础》中是这样说的:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
- 源码部分
|
|
- 调用部分
|
|
1.4 Prototype 原型模式
在GOF的《设计模式:可复用面向对象软件的基础》中是这样说的:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。这这个定义中,最重要的一个词是“拷贝”,也就是口头上的复制,而这个拷贝,也就是原型模式的精髓所在。。
- 源码部分
|
|
- 调用部分
|
|
1.5 Singleton 单例模式
在GOF的《设计模式:可复用面向对象软件的基础》中是这样说的:保证一个类只有一个实例,并提供一个访问它的全局访问点。
- 源码部分
|
|
- 调用部分
|
|
2 结构型
2.1 Adapter 适配器模式
在GOF的《设计模式:可复用面向对象软件的基础》中是这样说的:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
- 源码部分
|
|
- 调用部分
|
|
2.2 Bridge 桥接模式
在GOF的《设计模式:可复用面向对象软件的基础》一书中对桥接模式是这样说的:将抽象部分和它的实现部分分离,使它们都可以独立的变化。简单粗暴的说,就是抽象对外提供调用的接口;对外隐瞒实现部分,在抽象中引用实现部分,从而实现抽象对实现部分的调用,而抽象中引用的实现部分可以在今后的开发过程中,切换成别的实现部分。
- 源码部分
|
|
- 调用部分
|
|
2.3 Composite 组合模式
在GOF的《设计模式:可复用面向对象软件的基础》一书中对组合模式是这样说的:将对象组合成树形结构以表示“部分-整体”的层次结构。组合(Composite)模式使得用户对单个对象和组合对象的使用具有一致性
- 源码部分
|
|
- 调用部分
|
|
2.4 Decorator 装饰模式
在GOF的《设计模式:可复用面向对象软件的基础》一书中对装饰模式是这样说的:动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。
- 源码部分
|
|
- 调用部分
|
|
2.5 Facade 外观模式
在GOF的《设计模式:可复用面向对象软件的基础》一书中对外观模式是这样说的:将子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
- 源码部分
|
|
- 调用部分
|
|
2.6 Flyweight 享元模式
在GOF的《设计模式:可复用面向对象软件的基础》一书中对享元模式是这样说的:运用共享技术有效地支持大量细粒度的对象
- 源码部分
|
|
- 调用部分
|
|
2.7 Proxy 代理模式
在GOF的《设计模式:可复用面向对象软件的基础》一书中对代理模式是这样说的:为其他对象提供一种代理以控制对这个对象的访问
- 源码部分
|
|
- 调用部分
|
|
3 行为型
3.1 Chain Of Responsibility 责任链模式
在GOF的《设计模式:可复用面向对象软件的基础》一书中对职责链模式是这样说的:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,直到有一个对象处理它为止
- 源码部分
|
|
- 调用部分
|
|
3.2 Command 命令模式
在GOF的《设计模式:可复用面向对象软件的基础》一书中对命令模式是这样说的:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。在OOP中,一切都是对象,将请求封装成对象,符合OOP的设计思想,当将客户的单个请求封装成对象以后,我们就可以对这个请求存储更多的信息,使请求拥有更多的能力;命令模式同样能够把请求发送者和接收者解耦,使得命令发送者不用去关心请求将以何种方式被处理。
- 源码部分
|
|
- 调用部分
|
|
3.3 Observer 观察者模式
在GOF的《设计模式:可复用面向对象软件的基础》一书中对观察者模式是这样说的:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。当一个对象发生了变化,关注它的对象就会得到通知;这种交互也称为发布-订阅(publish-subscribe)。目标是通知的发布者,它发出通知时并不需要知道谁是它的观察者。
- 源码部分
|
|
- 调用部分
|
|
3.4 State 状态模式
在GOF的《设计模式:可复用面向对象软件的基础》一书中对状态模式是这样说的:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。
- 源码部分
|
|
- 调用部分
|
|
3.5 Strategy 策略模式
在GOF的《设计模式:可复用面向对象软件的基础》一书中对策略模式是这样说的:定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。该模式使得算法可独立于使用它的客户而变化。
- 源码部分
|
|
- 调用部分
|
|
3.6 Visitor 访问者模式
在GOF的《设计模式:可复用面向对象软件的基础》一书中对访问者模式是这样说的:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
- 源码部分
|
|
- 调用部分
|
|