工厂模式比较
1、简单工厂模式
简单工厂模式的特点是一个工厂生产一个类型的产品。
简单工厂模式 又可以叫做静态工厂方法模式,简单的来说就是由一个工厂对象来决定创建出哪一个具体的产品类的实例。其类图如下所示:
工厂类(Creator)包含一个或者多个静态工厂方法,每个静态工厂方法会创建一个新的具体产品的实例。乍看起来该模式跟单例模式很相似,其实它们还是有着很大的区别的,简单来说有三点区别:
A) 单例类的构造方法要求是私有的,只能通过单例子的静态工厂方法实例化。
B) 单例类兼有工厂类和产品类的角色,就是它自己。
C) 最大的区别就是单例子只会有一个实例存在。
如果要增加一个新的产品类,那么必须修改工厂类来提供相应的静态创建方法,这是简单工厂模式的限制,如果要克服这个限制的话,建议使用下述的工厂方法模式。
2、工厂方法模式
工厂方法模式的特点是多个工厂生产一个类型的产品。
工厂方法模式是对简单工厂模式的扩展,将核心的工厂类上升为一个接口或者抽象类,具体的产品创建工作由具体的工厂类来完成,避免了简单工厂模式引入新产品时需要修改工厂类的问题,详细的类图如下所示:
3、抽象工厂模式
抽象工厂模式的特点是多个工厂生产多个类型的产品。
抽象工厂模式是工厂方法模式的再次扩展和抽象化,这里需要引入一个产品族的概念,那么什么是产品族呢?所谓产品族,就是指位于不同产品等级结构中功能相关联的产品所组成的家族,举一个例子来说明一下,现在主流的手机操作系统有Android、IPHONE OS以及Windows Mobile 7.0,现在要在这三款平台上来开发两款热门的游戏,一个是文明4(CIV 4),还有一个是极品飞车13(NFS13),那么我们就拥有两个产品等级,亦即文明4和极品飞车,它们分属于三个不同的产品族,也就是三个不同的操作系统平台上开发的游戏,如下所示:
而所谓的抽象工厂模式就是要在具体的工厂类中创建属于同一个产品族,但是属于不同产品等级结构的产品。相关的类图如下所示:
该类图中有两个不同的产品等级,亦即AbstractProductA和AbstractProductB,而A1和B1显然属于同一个产品族,A2和B2也是属于同一个产品族。
4、建造模式
建造模式的特点是定制产品。
该模式允许一个导演者对象调用建造者对象一步一步造出各种零件,然后到最后构成完整的产品对象,如下所示:
抽象工厂模式与建造模式有点相似,因为它也可以创建复杂对象。主要的区别是生成器模式着重于一步步构造一个复杂对象。而抽象工厂模式着重于多个系列的产品对象(简单的或是复杂的)。生成器在最后的一步返回产品,也就是在建造者内部来完成完整产品的组装工作,而对于抽象工厂来说,产品是立即返回的。