首页 > 代码库 > 创建类模式大PK(总结)

创建类模式大PK(总结)

创建类模式包括工厂方法模式、建造者模式、抽象工厂模式、单例模式和原型模式,它们都能够提供对象的创建和管理职责。其中的单例模式和原型模式非常容易理解,单例模式是要保持在内存中只有一个对象,原型模式是要求通过复制的方式产生一个新对象,这两个不容易混淆。下面主要分析其它三种模式。
 
 
一、工厂方法模式VS建造者模式
 
1、意图不同
在工厂方法模式里,关注的是一个产品整体,无须关心产品的各部分是如何创建出来的;但在建造者模式中,一个具体产品的产生是依赖各个部件的产生以及装配顺序,它关注的是“由零件一步一步地组装出产品对象”,简单地说,工厂模式是一个对象创建的粗线条应用,建造者模式则是通过细线条勾勒出一个复杂对象,关注的是产品组成部分的创建过程。
2、产品的复杂度不同
工厂方法模式创建的产品一般都 是单一性质产品,而建造者模式创建的则是一个复合产品,它由各个部件复合而成,部件不同产品对象当然不同。这不是说工厂方法模式创建的对象简单,而是指它们的粒度大小不同。一般来说,工厂方法模式的对象粒度比较粗,建造者模式的产品对象粒度比较细。
 
实践:如果需要详细关注一个产品部件的生产、安装步骤,则选择建造者,否则工厂。
 
 
二、抽象工厂模式VS建造者模式
 
抽象工厂模式就像一个巨头有许多“工厂”,使用“工厂”来描述构建者,而建造者模式就像一个工厂有许多“车间”,使用“车间”来描述构建者。抽象工厂模式是从一个更高层次去看对象的创建,具体到工厂内部还有很多车间,但这些都是隐藏在工厂内部的细节,对外不公布。而建造者模式就不同了,它是由车间构成,不同的车间完成不同的创建和装配任务,一个完整的汽车生产过程需要引擎制造车间、引擎装配车间的配合才能完成,它们配合的基础就是设计蓝图,而这个蓝图在车间主任手中(导演类)。建造者模式更关心建造过程。虽然从外界来看一个车间还是生产车辆,但是这个车间的转型是非常快的,只要重新设计一个蓝图,即可产生不同的产品。
 
实践:相对来说,抽象工厂模式比建造者模式的尺度要大,它关注产品整体。而建造者模式关注构建过程,因此建行者模式可以很容易地构建出一个崭新的产品,只要导演类能够提供具体的工艺流程。也正因为如此,如果希望屏蔽对象的创建过程,只提供一个封装良好的对象,则可以选择抽象工厂方法模式。而建造者模式可以用在构件的装配方面,如通过装配不同的组件或者相同组件的不同顺序,可以产生一个新的对象,它可以产生一个非常灵活的架构,方便地扩展和维护系统。

创建类模式大PK(总结)