抽象工厂模式——Head First Design Patterns
来源:互联网 发布:地球之眼软件 编辑:程序博客网 时间:2024/05/17 04:22
定义:创建一组相似或者相互依赖的对象,但是创建方法不返回具体的类。
使用场景: 1)当需要创建多个系列的产品时,想要保证同一系列的产品在同一个工厂里面
类图:
代码样例:
public class ChicagoPizzaIngredientFactory implements PizzaIngredientFactory {public Dough createDough() {return new ThickCrustDough();}public Sauce createSauce() {return new PlumTomatoSauce();}public Cheese createCheese() {return new MozzarellaCheese();}public Veggies[] createVeggies() {Veggies veggies[] = { new BlackOlives(), new Spinach(), new Eggplant() };return veggies;}public Pepperoni createPepperoni() {return new SlicedPepperoni();}public Clams createClam() {return new FrozenClams();}}
public class NYPizzaIngredientFactory implements PizzaIngredientFactory { public Dough createDough() {return new ThinCrustDough();} public Sauce createSauce() {return new MarinaraSauce();} public Cheese createCheese() {return new ReggianoCheese();} public Veggies[] createVeggies() {Veggies veggies[] = { new Garlic(), new Onion(), new Mushroom(), new RedPepper() };return veggies;} public Pepperoni createPepperoni() {return new SlicedPepperoni();}public Clams createClam() {return new FreshClams();}}
public class ChicagoPizzaStore extends PizzaStore {protected Pizza createPizza(String item) {Pizza pizza = null;PizzaIngredientFactory ingredientFactory =new ChicagoPizzaIngredientFactory();if (item.equals("cheese")) {pizza = new CheesePizza(ingredientFactory);pizza.setName("Chicago Style Cheese Pizza");} else if (item.equals("veggie")) {pizza = new VeggiePizza(ingredientFactory);pizza.setName("Chicago Style Veggie Pizza");} else if (item.equals("clam")) {pizza = new ClamPizza(ingredientFactory);pizza.setName("Chicago Style Clam Pizza");} else if (item.equals("pepperoni")) {pizza = new PepperoniPizza(ingredientFactory);pizza.setName("Chicago Style Pepperoni Pizza");}return pizza;}}
public class CheesePizza extends Pizza {PizzaIngredientFactory ingredientFactory; public CheesePizza(PizzaIngredientFactory ingredientFactory) {this.ingredientFactory = ingredientFactory;} void prepare() {System.out.println("Preparing " + name);dough = ingredientFactory.createDough();sauce = ingredientFactory.createSauce();cheese = ingredientFactory.createCheese();}}
优点:1)将一组功能相关的产品放在一个工厂里面
缺点:1)每加一种新方法都要改变
类似的设计模式:1)工厂方法模式;抽象工厂模式侧重于产生一系列产品组,而工厂方法模式侧重于产生一个产品组
配套的内功心法:1)
- 抽象工厂模式——Head First Design Patterns
- 工厂方法模式——Head First Design Patterns
- head first design patterns(1):策略模式,观察者模式,工厂模式,抽象工厂模式
- 策略模式——Head First Design Patterns
- 观察者模式——Head First Design Patterns
- 装饰者模式——Head First Design Patterns
- 单例模式——Head First Design Patterns
- 命令模式——Head First Design Patterns
- 适配器模式——Head First Design Patterns
- 门面模式——Head First Design Patterns
- 模板方法模式——Head First Design Patterns
- 迭代器模式——Head First Design Patterns
- 组合模式——Head First Design Patterns
- 状态模式——Head First Design Patterns
- 代理模式——Head First Design Patterns
- 复合模式——Head First Design Patterns
- 桥接模式——Head First Design Patterns
- 中介者模式——Head First Design Patterns
- 有一个南北向的桥,只能容纳一个人,现桥的两边分别有10人和12人,编制一个多线程序让这些人到达对岸,每个人用一个线程表示,桥为共享资源。在过桥的过程中显示谁在过桥及其走向。
- opencv 笔记 00Begin
- ssh框架下 对数据库的增删改查
- 生活需要奋斗
- linux下查询进程命令 ps 详细分析
- 抽象工厂模式——Head First Design Patterns
- 腾讯2011.10.15校园招聘会笔试题
- BufferedImage与byte[]互转
- 设计模式在android中的应用——适配器模式
- 学习Gtkmm系列之六
- STL用法解析
- 2013 编程之美资格赛
- QR码生成原理(一)
- jQuery 插件autocomplete自动完成应用(自动补全)(asp.net后台)