设计模式之-----工厂模式

来源:互联网 发布:黄牛刷票软件 编辑:程序博客网 时间:2024/06/07 02:22

1,工厂模式有三种:

1)简单工厂模式:由一个具体类专门负责创建所有的实例

2)工厂方法模式:有一个核心的抽象工厂类,即有一个工厂等级结构,由各个具体厂类创建同一个类实例(只有一个工厂方法)

(3)抽象工厂模式:有一个核心的抽象工厂类,即有一个工厂等级结构,由各个具体工厂类创建多个类实例(有多个工厂方法)

 

2,简单工厂模式与工厂方法模式的区别

(1)结构不同:

     简单工程模式是一个具体的类,提供一个静态方法创建对象;

     工厂方法模式是由某个具体的工厂类来创建对象,创建对象的方法不是静态方法;

(2)简单工厂模式的核心和那个无所不能,负责创建所有实例对象的工厂类;

      厂方法模式的核心是抽象工厂类,创建对象又具体的工厂类实现;

(3)即工厂方法模式是简单工厂模式的扩展;

 

2,工厂方法模式与抽象工厂模式的区别

 (1)工厂方法模式的具体工厂类一般只有一个工厂方法,而抽象工厂模式的具体工厂类有多个工厂方法,因为工厂方法模式对应的是一个产品等级结构,而抽象工厂模式对应的是多个产品等级结构,即产品族;

 (2)工厂方法模式完全符合“开-闭”原则,但抽象工厂模式要看情况:如果是增加新的产品族,而产品等级结构不变,则也完全符合“开-闭”原则;但如果产品族数目不变,而改变产品等级结构的时候,不符合符合“开-闭”原则(要修改相应的具体工厂类代码,即增加或是减少工厂方法);

 

3,简单工程模式的缺点:

1)因为工厂类太全能(负责创建所有的实例),所以当增加新的产品的时候,必须修改工厂类的源代码,即不符合“开-闭”原则(一个软件实体应当对扩展开放,对修改关闭)------------>也就是:允许扩展功能,不允许修改源代码

而工厂方法模式避免了简单工厂模式的这个缺点:

在工厂方法模式中,创建实例的工作由每一个具体的工厂类实现,当需要增加新的产品时,是需要增加一个对应的具体工厂类就好,不必修改已有的代码,完全符合“开-闭”原则。

2)简单工厂模式使用静态方法作为工厂方法,而子类无法继承静态方法,所以,工厂角色无法形成基于继承的等级结构,而工厂方法模式有工厂角色等级结构;

 

4,实例:

Java API

1)使用简单工厂模式的有:DateFomat类(getTimeInstance()方法返回其子类SimpleDateFomat的实例)

2)使用工厂方法模式的有:集合Collection接口要求所有的子集合都必须提供一个iterator()方法,返回一个Iterator对象,这个iterator()方法就是一个工厂方法;

3)使用抽象工厂模式的有:AWT

原创粉丝点击