GoF23
种设计模式中创建型模式有
5
种,分别是:
Singleton
单件模式、
Abstract Factory
抽象工厂模式、
Builder
生成器模式、
Factory Method
工厂方法模式、
Prototype
原形模式。下面分别总结这几种设计模式。
设计模式
|
GoF
的描述
|
我的理解
|
Singleton
单件模式
|
保证一个类仅有一个实例,并提供一个该实例全局的访问点
|
控制实体对象的数量
|
Abstract Factory
抽象工厂模式
|
提供一个接口,让该接口负责创建一系列
“
相关或者相互依赖的对象
”
,无需指定他们的具体类
|
解决一个系列的对象变化的问题
|
Builder
生成器模式
|
将一个复杂对象的构建与其表示向分离,使得同样的构建过程可以创建不同的表示
|
应对项目中一些复杂对象的创建工作。所谓
“
复杂对象
”
,是指:此对象中还含有其它的子对象
|
Factory Method
工厂方法模式
|
定义一个用于创建对象的接口,让子类决定实例化那个类。
FactoryMethod
使得一个类的实例化延迟到子类
|
解决的是“某个对象”的创建工作,由于需求的变化,这个对象常常面临着剧烈的变化,但是这个对象拥有的接口相对稳定。也就是说:枝节常常发生变化,但是枝节与主干的接口相对稳定
|
Prototype
原形模式
|
使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象
|
某些结构复杂的对象的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是他们却拥有比较稳定一致的接口
|
在学习的过程中,觉得从功能上看
Abstract Factory
模式和
Builder
模式容易混淆,
Factory Method
模式和
Prototype
模式不好区分。
Singleton
模式没什么太大的困难。下面就来分析一下前四种模式。
一、
Abstract Factory
模式和
Builder
模式:
Abstract Factory
是应对一系列对象的创建的问题,正如前面文章中举的例子,对于创建一个汽车对象来说,
Abstract Factory
模式更关注一系列的对象的创建,或者说是汽车类型中的各个部分,如:
Wheel
、
Engine
、
Body
等等类型的创建。换句话说关注点在这一系列对象上。
Builder
是应对一个复杂对象创建的问题,或者说是针对这个复杂对象中的子对象的创建的问题。以汽车的例子来说,我觉得比起
Abstract Factory
模式,
Builder
模式相对注重汽车类型(上面所说的“复杂对象”)本身以及其各个部分(
Wheel
、
Engine
、
Body
等等)类型的创建。
Builder
模式要求这个复杂的类型(汽车)中的各个子类型的结合部分相对稳定,用例子说明就是对于汽车来说,无论用什么配件组装,个个配件的组装方式都一样,有相对稳定的接口。对于这辆车你用什么牌子的
Wheel
、什么牌子的
Engine
可能变化会很大很频繁。
二、
Factory Method
模式和
Prototype
模式:
开始我觉得这两种模式从功能上讲是一样的(个人观点),都是封装了对对象的创建,只不过
Prototype
模式是用
原型克隆
进行拷贝来完成对象的创建,在这之中还应注意浅拷贝和深拷贝的区别。在向同事请教后有点明白。这两种模式在应用场景上还是一定的区别的。
Factory Method
模式是重新创建一个对象
Prototype
模式是利用现有的对象进行克隆,当两个对象或多个对象雷同的时候,可以考虑用一个已创建的对象去克隆出其余的对象。
以上是对创建型模式的总结,如有不对的观点欢迎指正。