工厂模式JAVA课件.pptVIP

  • 23
  • 0
  • 约4.98千字
  • 约 59页
  • 2022-05-11 发布于重庆
  • 举报
工厂方法模式的系统涉及到的角色 抽象工厂(Creator)角色:担任这个角色的是工厂方法模式的核心,它是与应用程序无关的。任何在模式中创建对象的工厂类必须实现这个接口。在上面的系统中这个角色由Java 接口Creator 扮演;在实际的系统中,这个角色也常常使用抽象Java 类实现。 具体工厂(Concrete Creator)角色:担任这个角色的是实现了抽象工厂接口的具体Java 类。具体工厂角色含有与应用密切相关的逻辑,并且受到应用程序的调用以创建产品对象。在本系统中给出了两个这样的角色,也就是具体Java 类ConcreteCreator1 和ConcreteCreator2。 第三十一页,共五十九页。 工厂方法模式的系统涉及到的角色 抽象产品(Product)角色:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。在本系统中,这个角色由Java 接口Product 扮演;在实际的系统中,这个角色也常常使用抽象Java 类实现。 具体产品(Concrete Product)角色:这个角色实现了抽象产品角色所声明的接口。工厂方法模式所创建的每一个对象都是某个具体产品角色的实例。 第三十二页,共五十九页。 实例(农场) 第三十三页,共五十九页。 工厂方法模式和简单工厂模式 工厂方法模式的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体类上。 工厂方法模式可以允许很多具体工厂类从抽象工厂类中将创建行为继承下来,从而可以成为多个简单工厂模式的综合,进而推广了简单工厂模式。 第三十四页,共五十九页。 工厂方法模式和简单工厂模式 与简单工厂模式中的情形一样的是,ConcreteCreator 的factory() 方法返还的数据类型是一个抽象类型Product,而不是哪一个具体产品类型,而客户端也不必知道所得到的产品的真实类型。这种多态性设计将工厂类选择创建哪一个产品对象、如何创建这个对象的细节完全封装在具体工厂类内部。 对于增加新的产品类而言,这个系统完全支持“开-闭”原则。 第三十五页,共五十九页。 抽象工厂模式 第三十六页,共五十九页。 第三十七页,共五十九页。 第三十八页,共五十九页。 抽象工厂模式与工厂方法模式的区别 抽象工厂模式与工厂方法模式的最大区别就在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则需要面对多个产品等级结构。 第三十九页,共五十九页。 第四十页,共五十九页。 第四十一页,共五十九页。 第四十二页,共五十九页。 JAVA工厂模式 第一页,共五十九页。 工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类。 第二页,共五十九页。 工厂模式的几种形态 (1)简单工厂(Simple Factory)模式,又称静态工厂方法模式(Static Factory Method Pattern)。 (2)工厂方法(Factory Method)模式,又称多态性工厂(Polymorphic Factory)模式 或虚拟构造子(Virtual Constructor)模式; (3)抽象工厂(Abstract Factory)模式,又称工具箱(Kit 或Toolkit)模式。 第三页,共五十九页。 简单工厂实例 比如说有一个农场公司,专门向市场销售各类水果。在这个系统里需要描述下列的水果: 葡萄 Grape 草莓 Strawberry 苹果 Apple 水果与其他的植物有很大的不同,就是水果最终是可以采摘食用的。那么一个自然的作法就是建立一个各种水果都适用的接口,以便与农场里的其他植物区分开。 第四页,共五十九页。 第五页,共五十九页。 代码清单1:接口Fruit 的源代码 public interface Fruit { /** * 生长 */ void grow(); /** * 收获 */ void harvest(); /** * 种植 */ void plant(); } 第六页,共五十九页。 代码清单2:类Apple 的源代码 public class Apple implements Fruit { private int treeAge; public void grow() { log(Apple is growing...); } public void harvest() { log(Apple has been harvested.); } 第七页,共五十九页。 public void plant() { log(Apple has been planted.); } public static void log(String msg) { System.out.println(msg);

文档评论(0)

1亿VIP精品文档

相关文档