A Cooly Weblog

   ::  ::  ::  ::  :: 管理

工厂方法模式Factory Method

Posted on 2007-02-28 00:51 acooly 阅读(583) 评论(0)  编辑  收藏 所属分类: Java开发设计模式

1.    模式定义... 1

2.    模式介绍... 1

3.    模式特点... 2

4.    与其它模式的关系... 3

5.    参考... 3

 

1.    模式定义

工厂方法模式 (Factory Method) 是创建模式的一种,也叫虚拟构造子 (Virture Constractor) 模式或多态性工厂 (Polymorphic Factory) 模式。

       工厂方法模式定义一个抽象的对象创建类或接口,将实际的对象创建工作交给子类来实现。

2.    模式介绍

2.1. 简单类图

 

2.2. 类图对应示例代码

2.2.1. 抽象产品: AbstractProduct

public interface AbstractProduct{

  public void printName();

}

 

2.2.2. 具体产品: ConcreteProduct1 ConcreteProduct2

public class ConcreteProduct1 implements AbstractProduct{

  public void printName(){

    System.out.println(“ConcreteProduct1”);

}

}

public class ConcreteProduct2 implements AbstractProduct{

  public void printName(){

    System.out.println(“ConcreteProduct2”);

}

}

 

2.2.3. 抽象工厂: AbstractFactory

public interface AbstractFactory {

  public AbstractProduct factoryMethod();

}

2.2.4. 具体工厂: ConcreteFactory1 ConcreteFactory2

public class ConcreteFactory1 implements AbstractFactory{

  public AbstractProduct factoryMethod(){

//do something.

return new ConcreteProduct1();

}

}

 

public class ConcreteFactory2 implements AbstractFactory{

  public AbstractProduct factoryMethod(){

//do something.

return new ConcreteProduct2();

}

}

 

3.    模式特点

3.1. 开闭原则(优点)

工厂方法模式解决了简单工厂模式的一些缺陷,是在简单工厂模式的基础上发展的。

简单工厂模式把所有的重心放到工厂类上,一旦向系统增加新的产品,就必须修改工厂类,不满足开闭原则;工厂方法模式提供一个抽象的工厂接口,在不同的产品结构上实现不同的产品工厂具体类来创建该层次中的产品,通常一个具体工厂创建一个具体产品。在新增产品的时候,只需要实现新的对应工厂就可以满足需要,是符合开闭原则的。

 

3.2. 缺点

  1. 相比简单工厂模式,工厂方法模式客户端编程复杂,每个产品的创建都需要实例化对应的工厂类。
  2. 相对的扩展性,当需要修改产品结构中的对各产品的时候,需要修改各个工厂(当然也可以直接新加入很多新的产品和工厂,但这样不是又增加了很多无用的遗留类吗,而且现实中很可能要修改客户端代码了。),而简单工厂模式仍然只要修改一个工厂类。
  3. 现实中常常要使用退化模式,失去多态性。实际设计中经常会有子类新增功能,那么在对应工厂生产该类的时候就需要直接返回该具体类,而不是抽象产品,不然就要向下转型了。

 

 

4.    与其它模式的关系

工厂方法模式与模板模式

 

5.    参考

java 设计模式》 阎宏 电子工业出版社


只有注册用户登录后才能发表评论。


网站导航: