设计模式之工厂模式

来源:互联网 发布:深圳市软件行业协会 编辑:程序博客网 时间:2024/06/17 21:11

目的:为了实现用户与所需对象相分离而引入简单工厂模式

原理:根据客户端传递给工厂的不同参数,创建不同的产品;当增加新产品时,需要增加产品类并修改工厂类,违反了OCP原则。

简单工厂模式层次结构类图:

StaticFactory是万能工厂类,可以创建用户所需要的各种对象。

适用范围:创建的对象比较少以及层次结构比较简单的程序。

2、工厂方法模式

目的:由于简单工厂模式无法解决复杂的多层次结构的问题,以及简单工厂模式使用的是静态方法作为工厂的方法,而静态方法是无法由子类继承,从而造成工厂的可扩展性受到限制,因此引入工厂方法模式。

原理:不同的工厂创建不同产品,每个工厂只能创建一类产品,当用户需要增加新的产品时,只需要继承父类接口,创建出新的工厂生产新的产品。

工厂方法模式层次结构类图:


每个工厂生产一种产品对象。多个工厂生产多种产品替代一个工厂生产多种产品(上帝工厂),当增加新的产品时,只需要创建一个继承抽象工厂的新的工厂,从而无需修改已有的代码,符合开—闭原则。

适用范围:客户无需知道对象的创建过程;客户需要使用的对象种类非常多,并且有扩展需要。

缺点:当存在大量的产品对象是,就会出现与之相对应的工厂对象,为了避免这种情况,可以将简单工厂模式和工厂方法模式结合起来使用。

3.抽象工厂模式

目的:因为工厂方法模式无法实现一个工厂生产多种产品,而抽象工厂模式具备一个工厂支持生产一个产品族的能力。

原理:一个工厂创建一个产品族(多个产品对象)。

抽象工厂模式层次结构类图:


适用范围:对一系列相关的产品对象进行设计并进行联合使用;当你提供了一个产品类库时,但是只想显示他们的接口而不是具体实现。

缺点:在一个产品族中扩展新的产品时是非常困难的,它需要修改抽象工厂的接口,违反了开—闭原则,从而使软件结构变得更复杂。

总结:

抽象工厂模式和工厂方法模式的区别:

(1)工厂方法模式是抽象工厂模式的一个极端情况,抽象工厂模式是工厂模式的一种推广。

(2)抽象工厂模式是用来创建多个产品的等级结构,而工厂方法模式是用来创建一个产品的等级结构,即工厂方法模式一般只有一个方法,创建一种产品,而抽象工厂模式一般有多个方法,用来创建一系列相关的产品。

(3)工厂方法模式只有一个产品抽象类,而抽象工厂方法有多个产品抽象类,工厂方法模式的具体工厂类只能创建一个具体的产品类;而抽象工厂模式可以创建多个。

注意:工厂的实现通常使用singleton模式,一个应用中一般每个产品系列只需要使用一个具体工厂的实例,所以工厂通常最好实现为一个singleton模式。





0 0