文|Seraph
0 | 引言
0.1 设计模式解析
- 学习过程定义:自己学会一门知识(技术)、表达出来、教会别人、记录下。
- C++老手和新手的区别就是前者手背上有很多伤疤。
- 面向对象系统的分析设计实际上追求的就是两点:
- 高内聚(Cohesion)
- 低耦合(Coupling)
- 设计模式体现的是一种思想,接受一种思想的熏陶和洗礼,等这种思想融入到了你的思想中后,你就会不自觉地使用这种思想去进行你的设计和开发。
- 学习设计模式的过程是一个迭代的过程,无太多经验的程序员,可以从最简单、常用的设计模式入手。
23种设计模式
1 | 创建模式
创建模式有以下5种:Factory、AbstratFactory、Singleton、Builder、Prototype。
1.1 Factory工厂模式
问题
(1)N多个子类继承自抽象基类,我们不得不每次都new xxxxx,当子类过多,难以使用和维护。
(2)父类中并不知道具体要实例化哪个具体的子类。
功能
(1)定义创建对象的接口,封装了对象的创建;
(2)使得具体化类的工作延迟到了子类中。
UML
(1) 解决问题1的UML图如下,其实也是我们常说的简单工厂模式,声明一个创建对象的接口,并封装了对象的创建过程。
简单Factory模式结构示意图
(2)解决问题2的UML图如下,提供一个对象创建对象的接口,并在子类中提供其具体实现(因为只有在子类中可以决定到底实例化哪一个类)。
如下Factory中只是提供了对象创建的接口,其实现将放在Factory的子类ConcreteFactory中进行。
Factory模式结构示意图
总结
优点:Factory模式的威力所在,不是提供了创建对象的接口,而是延迟了子类的实例化。
缺点:Factory的接口不能封闭,即使通过Factory的子类来实现也需要新键一个类为代价。同时,Factory模式仅仅局限于一类类。
1.2 AbstratFactory抽象模式
问题
(1)要创建一组相关或者相互依赖的对象。
功能
将一组对象的创建封装到一个用于创建对象的类中。
UML
AbstractFactory Pattern 结构图总结
(1)相较于Factory模式,AbstractFactory模式可以为创建一组(有多个类)相关或依赖的对象提供创建接口。
1.3 Singleton单例模式
问题
创建一个唯一的对象。
功能
通过维护一个static的成员变量来记录这
个唯一的对象实例。
通过提供一个staitc的接口instance来获得这个唯一的实例。
UML
Singleton模式结构图总结
(1)注意Singleton不可以被实例化,因此构造函数声明为protected或private。
(2)Singleton模式经常会与Factory(AbstractFactory)模式一起使用。如上面所述的工厂对象一般来说只要一个,所以写成一个Singleton即可。
1.4 Builder建造者模式
问题
(1)当我们要创建的对象很复杂的时候(通常是由很多其他的对象组合而成)。
功能
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
UML
Builder模式结构图Builder模式的关键是其中的Director对象并不直接返回对象,而是通过一步步(BuildPartA,BuildPartB,BuildPartC)来一步步进行对象的创建。当然这里Director可以提供一个默认的返回对象的接口(即返回通用的复杂对象的创建,即不指定或者特定唯一指定BuildPart中的参数)。
总结
(1) 相较于AbstractFactory模式
- Builder模式强调的是一步步创建对象,并通过相同的创建过程可以获得不同的结果对象,一般来说Builder模式中对象不是直接返回的。
- AbstractFactory模式中对象是直接返回的,AbstractFactory模式强调的是为创建多个相互依赖的对象提供一个同一的接口。
1.5 Prototype原型模式
问题
(1)自我复制
功能
提供一个通过已存在对象进行新对象创建的接口。
UML
Prototype模式结构图总结
(1)与Builder模式、AbstractFactory模式比较
都是通过一个类(对象实例)来专门负责对象的创建工作(工厂对象)
- Prototype模式通过复制原型(Prototype)而获得新对象创建的功能,这里Prototype本身就是“对象工厂”(因为能够生产对象)。
- Builder模式重在复杂对象的一步步创建(并不直接返回对象)。
- AbstractFactory模式重在产生多个相互依赖类的对象,而Prototype模式重在从自身复制自己创建新类。
2 | 结构型模式
结构型模式有以下7种:Bridge、Adapter、Decorator、Composite、Flyweight、Facade、Proxy。
2.1 Bridge模式
3 | 行为模式
行为模式有以下11种:Template、Strategy、State、Observer、Memento、Mediator、Command、Visitor、Chain of Responsibility、Iterator、Interpreter。
3.1 Template模式
4 | 总结
4.1 23种设计模式功能
设计模式 | 功能 |
---|---|
Factroy Method |
网友评论