工厂模式(Factory)

来源:互联网 发布:软件开发团队名称 编辑:程序博客网 时间:2024/06/07 01:13

工厂模式(Factory)

概述

工厂模式(Factory)属于创建型模式,为创建对象提供一个接口,以便将创建对象的具体过程屏蔽起来,达到提高灵活性的目的。
工厂模式主要分为三类:

  • 简单工厂模式(Simple Factory)
  • 工厂方法模式(Factory Method)
  • 抽象工厂模式(Abstract Factory)

这三种模式从上到下逐步抽象,并且更具一般性
GOF将工厂模式分为两类:工厂方法模式(Factory Method)与抽象工厂模式(Abstract Factory),其将简单工厂模式看成是工厂方法模式的一个特例,两者归为一类。

简单工厂模式

简单工厂模式属于类的创建型模式,又叫静态工厂方法模式,是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的实例。

类图

简单工厂模式

角色

工厂角色(Factory):这是简单工厂模式的核心,由其创建所有类的内部逻辑。工厂类必须能被外部调用,创建所需要的产品。
抽象产品角色(Product):简单工厂模式所创建的所有对象的父类,父类可以是接口也可以是抽象类,负责描述所有实例所共有的公共接口。
具体产品角色(Concrete Product):简单工厂所创建的具体的实例对象,这些具体的产品往往都拥有共同的父类。

优缺点

优点:

工厂类是整个模式的关键所在。它必须包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。用户在使用时可以直接根据工厂类去创建所需要的实例,而无需了解这些对象是如何创建以及如何组织的,有利于整个软件体系结构的优化。

缺点:

  • 工厂类集中了所有实例的创建逻辑,导致一旦工厂出了问题,所有的客户端就都会受到牵连
  • 由于简单工厂模式的产品是基于一个共同的抽象类或接口,这样一来,等产品的种类增加的时候,即有不同的产品接口或者抽象类的时候,工厂类就需要判断何时创建何种种类的产品,这就和创建何种种类的产品相互混淆在一起,违背了单一原则,导致系统丧失了灵活性和可维护性。
  • 简单工厂模式违背了“开放封闭原则”,即违背了“系统对扩展开放,对修改封闭”的原则,因为当我新增加一个产品的时候必须修改工厂类,相应的工厂类就需要重新编译一遍。

工厂方法模式(Factory Method)

定义一个用于创建对象的接口Factory,在具体的ConcreteFactory子类中根据传进的参数即具体子类ConcreteProduct决定实例化哪一个Product产品,该模式使得一个类(Product)的实例延迟到其子类(即ConcreteProduct)

类图

工厂方法模式

抽象工厂模式(Abstract Factory)

抽象工厂模式是工厂方法模式的进一步抽象,为创建一组相关或相互依赖的对象提供一个接口,无需知道它们的具体类。抽象工厂模式通常用于创建一族产品,并且这族产品分不同的等级,不同的具体工厂类生成不同等级的一族产品。

类图

抽象工厂模式

总结

(1)简单工厂模式是由一个具体的类去创建其他类的实例。
(2)工厂方法模式是有一个抽象的父类定义公共接口,子类负责生成具体的对象,这样做的目的是将类的实例化操作延迟到子类中完成。
(3)抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无须指定他们具体的类。它针对的是有多个产品的等级结构。而工厂方法模式针对的是一个产品的等级结构。

简单工厂模式只有一份抽象的产品,工厂是具体的;(普通)工厂模式的同样也只有一份抽象的产品,但工厂有抽象的了;抽象工厂模式工厂当然是抽象的,但是它独特的地方在于产品至少有两份是抽象的。

原创粉丝点击