简单工厂(Simple Factory)模式

来源:互联网 发布:java实现打印功能 编辑:程序博客网 时间:2024/06/05 17:35

1.类图和源码

简单工厂类图
角色描述:

  • 工厂类(Creator)角色:工厂方法模式的核心,在客户端的直接调用下创建产品对象。
  • 抽象产品(Product)角色:由工厂方法模式创建的产品父类,或它们拥有共同的接口。
  • 具体产品(ConcreteProduct)角色:工厂方法模式创建的对象。

示例性代码:
1).工厂类:

public class Creator {    public static Product factory() {        return new ConcreteProduct();    }}

2).抽象产品:抽象产品主要的目的是给所有的具体产品提供一个共同的类型。在最简单的情况下,可以简化成一个标识接口(没有声明任何方法的空接口)。

public interface Product {}

3).具体产品:

public class ConcreteProduct implements Product {    public ConcreteProduct() {    }}

2.变种

1).抽象产品的省略。仍然以上面系统为例,类图如下:
这里写图片描述
2).工厂角色与抽象产品角色合并,类图如下:
这里写图片描述
抽象产品要改成抽象类,不能在使用接口。
3).三个角色合并,类图如下:
这里写图片描述

3.产品对象的循环使用和登记式的工厂方法

在很多情况下,产品对象可以循环使用,而不是每次都创建一个新的产品对象。工厂方法可以通过登记它所创建的产品对象来达到循环使用的目的。

如果工厂方法总是循环使用一个产品对象,那么这个工厂对象可以使用一个属性来存储这个产品对象,每次客户端调用工厂方法时,工厂方法总是提供一个这个对象;如果工厂方法永远使用固定数目的一些产品对象,而且数目不大时,仍然可以使用一些私有属性存储;如果产品对象的数目不定,或者数目较大,可以使用容器对象存储。

4.缺点

简单工厂模式对“开-闭”原则的支持不够,因为如有有新的产品加入到系统中,就要去修改工厂类。

0 0
原创粉丝点击