工厂> 抽象工厂
来源:互联网 发布:威海高哥淘宝店 编辑:程序博客网 时间:2024/04/28 17:50
通过抽象工厂所提供的接口,可以创建产品家族,利用这个接口书写代码,我们的代码将从实际工厂解耦,以便在不同上下文中实现各式各样的工厂,制造出各种不同的产品。
使用抽象工厂模式时,系统中通常有多个产品族,而系统一次只可能消费其中一族产品。
该模式下的类图:
Abstract Factory
如下抽象工厂定义了一个接口,所有的具体工厂都必须实现这个接口,这个接口包含了一组方法用来创建一组相关的产品。
package factory.abstractdemo;public interface PizzaIngredientFactory { public Dough createDough(); //制作面团 public Sauce createSauce(); //调料 public Cheese createCheese(); //奶油}
其中,面团、调料和奶油是三棵产品树,每棵树中拿出一个产品,组合起来就是一个产品家族,比如下面的(薄皮面团、海员式沙司、巴马干酪)就组成了一个产品家族;而(厚皮面团、番茄沙司、硬质奶酪)又是一个产品家族。生产Pizza时,每次都是消费一个产品家族。其中Dough、Sauce、Cheese都是抽象产品。
Concrete Factory 1
实现PizzaIngredientFactory接口的具体工厂-纽约原料工厂:
package factory.abstractdemo;// 纽约原料工厂public class NYPizzaIngredientFactory implements PizzaIngredientFactory{ @Override public Dough createDough() { return new ThinCrustDough(); //薄皮 } @Override public Sauce createSauce() { return new MarinaraSauce(); //海员式沙司 } @Override public Cheese createCheese() { return new ReggianoCheese(); //巴马干酪 }}
每个具体的工厂类产生的Dough+Sauce+Cheese构成了一个产品家族,不同的具体的工厂类产生了不同的产品家族。
Concrete Factory 2
再来看制造另一个产品家族的具体工厂类ChicagoPizzaIngredientFactory:
package factory.abstractdemo;// 芝加哥原料工厂public class ChicagoPizzaIngredientFactory implements PizzaIngredientFactory{ @Override public Dough createDough() { return new ThickCrustDough(); //厚皮 } @Override public Sauce createSauce() { return new TomatoSauce(); //番茄沙司 } @Override public Cheese createCheese() { return new HardCheese(); //硬质奶酪 }}
Client:
public class Pizza{ private Dough dough; private Sauce sauce; private Cheese cheese; private PizzaIngredientFactory factory; public void setFactory(PizzaIngredientFactory factory) { this.factory = factory; } public void prepare(){ this.dough = this.factory.createDough(); this.sauce = this.factory.createSauce(); this.cheese = this.factory.createCheese(); System.out.println("原料准备完毕"); }}
测试代码:
public class Test { public static void main(String[] args) { PizzaIngredientFactory factory = new NYPizzaIngredientFactory(); Pizza p = new Pizza(); p.setFactory(factory); p.prepare(); }}
输出结果:
原料准备完毕
参考资料:《Head First 设计模式》
0 0
- 简单工厂,工厂,抽象工厂
- 简单工厂、工厂、抽象工厂
- 简单工厂、工厂、抽象工厂
- 工厂模式 -- 抽象工厂
- 工厂模式-抽象工厂
- 抽象工厂 工厂方法
- 工厂> 抽象工厂
- 工厂模式-抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 《iOS Human Interface Guidelines》——Navigation Bar
- 使用tomcat简单发布网页
- day15
- LoadRunner学习笔记(三)
- CGBitmapContextCreate函数参数详解
- 工厂> 抽象工厂
- hadoop 执行的时候查看log 出现 bad state: BETWEEN_LOG_SEGMENTS
- 关键字声明extern
- java环境变量详解---找不到或无法加载主类
- C++笔记:0
- 怎么从MavenCentre和JCenter上自动获取你要的依赖
- 关联规则的R语言代码
- JavaScript高级程序设计(第3版)第二章读书笔记
- sendSubviewToBack,bringSubviewToFront