首页 > 代码库 > 设计模式之工厂模式

设计模式之工厂模式

  为什么要用工厂模式?创建一个对象用new不是挺简单的吗?Effective里面的第一条是用静态工厂方法来代替构造器。里面给出了下面几个理由:

  1、静态工厂方法创建对象时调用的是清晰的方法的名字,可以方便编程人员的阅读。

  2、工厂方法可以灵活地创建对象,比如可以控制对象的个数,可以返回任意类型的子类对象。

  3、在创建参数化实例类型时,可以使代码变得更简洁。

  从网上的资料中得出工厂模式大概分为三种,分别是简单工厂模式(静态工厂模式),工厂方法模式以及抽象工厂模式。

  一、简单工厂模式

  先来看看类图:

  

  这样,Factory就可以调用它的两个方法来创建AClass和BClass的实例。但是简单工厂模式没有严格的遵循“开闭”原则的要求,当出现CClass时,我们就需要修改Factory工厂类来满足创建CClass实例的要求。

  

  二、工厂方法模式

  工厂方法模式是简单工厂模式的改进,使其满足“开闭”原则的要求。它的基本思想是为每个类创建一个“工厂”生产线,这样,我新增一个类时只要新建一个“工厂”,这样就可以封装变化。它的类图如下:

  

  

  三、抽象工厂模式

  工厂方法模式已经满足了“开闭”原则,但是一个工厂只能生产一种产品,但是现实中可能按照不同的维度,将类进行分类。比如宝马和奔驰都有商务车和跑车,按照汽车品牌分类,我们可以建两个工厂,一个工厂专门生产宝马的车,一个工厂专门生产奔驰的车。同样的,我们可以按照汽车的类型进行分类,一个工厂专门生产商务车,一个工厂可以专门生产跑车。抽象工厂模式中一个工厂可以生产同一种类型的产品。

  取第一个为例子,类图如下:

  

设计模式之工厂模式