简单工厂模式并不是一个设计模式,更偏向于一种编程习惯, 至少不属于23种设计模式。

但是经常被用到,而且思想简单,可以说是工厂方法模式的一个引导,

这里简单介绍什么是简单工厂以及其优缺点

简单工厂的定义:

简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

 

简单工厂将对象的创建过程进行了封装,用户不需要知道具体的创建过程,只需要调用工厂类填入相应参数即可获取相应的对象

 

为什么也叫静态工厂方法呢?

因为使用简单工厂的时候,通常不用创建简单工厂类的类实例,没有创建实例的必要。因此可以把简单工厂类实现成一个工具类,直接使用静态方法就可以了。即简单工厂的方法通常是静态的,所以也被称为静态工厂。

简单工厂模式可以分为三种角色:

工厂(Creator):

简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。

抽象产品(Product):

简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。

具体产品(Concrete Product):

是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。

该博主举了个选衣服的例子我觉得简单易懂,推荐一下:

http://www.cnblogs.com/Bobby0322/p/4178412.html

优点:

  • 有利于整个软件体系结构的优化。工厂类决定究竟应该创建哪个具体类的对象. 使用者不必管这些对象究竟如何创建及如何组织的, 调用工厂类填入参数即可.明确了各自的职责和权利
  • 减少使用者的记忆量, 客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可
  • 在一定程度上提高了系统的灵活性, 通过引入配置文件,可以在不修改任何客户端代码的情况下更换和增加新的具体产品类
  • 帮助封装, 简单工厂帮助我们实现了组件的封装, 让组件外部能真正面向接口编程

缺点:

  • 工厂类的职责相对过重,增加新的产品需要修改工厂类的判断逻辑,这一点与开闭原则是相违背的,这是工厂类最大的问题
  • 一定程序上增加了系统的复杂度和理解难度, 使用简单工厂模式将会增加系统中类的个数
  • 系统扩展困难, 添加新产品就不得不修改工厂逻辑,在产品类型较多时,这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利;
  • 无法形成等级结构, 简单工厂模式由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构。

那么什么时候适合用简单工厂模式呢?

  • 工厂类负责创建的对象比较少;
  • 客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心, 想要完全封装隔离具体实现,让外部只能通过接口来操作封装体,那么可以选用简单工厂
  • 如果想要把对外创建对象的职责集中管理和控制,可以选用简单工厂

由于简单工厂很容易违反高内聚责任分配原则,一般只在很简单的情况下应用。

简单工厂模式的要点在于:

当你需要什么,只需要传入一个正确的参数,就可以获取你所需要的对象,而无须知道其创建细节。

10-07 16:06