二 工厂方法模式
2016-04-26 20:58
162 查看
工厂方法模式
定义:
定义一个创建产品类实例的工厂接口,而实际类实例的创建由继承自工厂接口的子类实现。核心工厂类不再负责具体类实例的创建,这样核心工厂类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口。意义:进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的类实例。角色:
抽象工厂角色->工厂方法模式的核心,任何工厂类都必须实现这个接口。
具体工厂角色
->具体工厂类是抽象工厂的一个实现,负责实例化类实例。
抽象角色
->工厂方法模式所创建的所有类实例的父类,它负责描述所有对象所共有的公共接口。
具体类角色
->工厂方法模式所创建的具体类实例对象。
工厂方法模式和简单工厂模式比较
1、结构上,工厂方法类的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体类上。2、工厂方法模式之还叫多态性工厂模式,原因是具体工厂类都有共同的接口,或者有共同的抽象父类。
3、当系统扩展需要添加新的类实例对象时,仅仅需要添加一个具体对
象,并实现一个具体工厂对象,原有工厂对象不需要进行任何修改,很好的符合了“开放-封闭”原则。而简单工厂模式在添加新产品对象后不得不修改工厂方法,扩展性不好。
代码讲解
以上一章节介绍的例子讲解。抽象工厂角色
public interface FruitFactory { public Fruit getFruit(); }
具体工厂角色
因为有两种水果apple和banana,所有需要两个具体工厂,用于创建该两种水果。分为为:
public class AppleFactory implements FruitFactory { public Fruit getFruit() { return new Apple(); } }
public class BananaFactory implements FruitFactory { public Fruit getFruit() { return new Banana(); } }
抽象角色
public interface Fruit { public void get(); }
具体类角色
public class Apple implements Fruit{ public void get(){ System.out.println("Apple"); } }
public class Banana implements Fruit{ public void get(){ System.out.println("Banana"); } }
到目前为止,还有最后一个问题,就是当添加新类的时候,该如何扩展?假如,我们再添加一个水果Pear。
按照上面的讲解,应该首先添加一个Pear的具体工厂类,如下:
public class PearFactory implements FruitFactory { public Fruit getFruit() { return new Pear(); } }
具体类角色,如下:
public class Pear implements Fruit { public void get() { System.out.println("Pear"); } }
是不是,很简单就实现了新类的扩展。
那么,该如何调用呢,请看:
public class MainClass { public static void main(String[] args) { //获得AppleFactory FruitFactory af = new AppleFactory(); Fruit apple = af.getFruit(); apple.get(); //获得BananaFactory FruitFactory bf = new BananaFactory(); Fruit banana = bf.getFruit(); banana.get(); //获得PearFactory FruitFactory pf = new PearFactory(); Fruit pear = pf.getFruit(); pear.get(); } }
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- 浅谈设计模式的学习
- 交换机升级排障实例
- Ruby设计模式编程之适配器模式实战攻略
- 实例讲解Ruby使用设计模式中的装饰器模式的方法
- 设计模式中的模板方法模式在Ruby中的应用实例两则
- Ruby设计模式编程中对外观模式的应用实例分析
- 实例解析Ruby设计模式编程中Strategy策略模式的使用
- Ruby中使用设计模式中的简单工厂模式和工厂方法模式
- Ruby使用设计模式中的代理模式与装饰模式的代码实例
- 详解组合模式的结构及其在Ruby设计模式编程中的运用
- C#编程中使用设计模式中的原型模式的实例讲解
- 使用设计模式中的工厂方法模式进行C#编程的示例讲解
- 实例解析C#设计模式编程中简单工厂模式的使用
- 详解C#设计模式编程中生成器模式的使用