设计模式之工厂方法模式

设计模式之工厂方法模式

1. 工厂方法模式定义

工厂方法模式是类的创建模式,又叫做虚拟构造子(Virtual Constructor)模式或者多态性工厂(Polymorphic Factory)模式。

工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。

简单工厂模式中在工厂方法中需要添加逻辑代码,当添加新的对象时不易扩展,此时可使用工厂方法模式

2. 代码实现

2.1 工厂接口

public interface IFactoryM { public Fruit factory(); }

2.2 抽象角色与具体角色

public interface Fruit { public void eat(); } public class Apple implements Fruit{ @Override public void eat() { // TODO Auto-generated method stub System.out.PRintln("apple eat"); } } public class Orange implements Fruit{ @Override public void eat() { // TODO Auto-generated method stub System.out.println("orange eat"); } }

2.3 工厂实现

public class AppleFactory implements IFactoryM{ @Override public Fruit factory() { return new Apple(); } } public class OrangelFactory implements IFactoryM{ @Override public Fruit factory() { return new Orange(); } }

2.4 调用

/** * 工厂方法模式 * 核心是一个抽象工厂类,具体工厂继承抽象工厂 * */ public class Main { private static IFactoryM fm; public static void main(String[] args) { fm = new AppleFactory(); fm.factory().eat(); fm = new OrangelFactory(); fm.factory().eat(); } }

3. 总结

 工厂方法模式和简单工厂模式在结构上的不同很明显。工厂方法模式的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体类上。   工厂方法模式退化后可以变得很像简单工厂模式。设想如果非常确定一个系统只需要一个具体工厂类,那么不妨把抽象工厂类合并到具体工厂类中去。由于只有一个具体工厂类,所以不妨将工厂方法改为静态方法,这时候就得到了简单工厂模式。

  如果系统需要加入一个新的类型,那么所需要的就是向系统中加入一个这个类以及所对应的工厂类。没有必要修改客户端,也没有必要修改抽象工厂角色或者其他已有的具体工厂角色。对于增加新的导出类型而言,这个系统完全支持“开-闭原则”。