工厂模式(2)
来源:互联网 发布:我是传奇结局知乎 编辑:程序博客网 时间:2024/06/03 19:18
Demo场景:PizzaStore添加加盟店NYStylePizzaStore,PizzaStore需要控制Pizza制作流程,不控制具体Pizza的口味,加盟店NYStylePizzaStore可以修改Pizza。
相较于上一篇,这里主要关注通过抽象工厂模式,解决不同原料的问题。
(1)总店还是作为加盟店的基类:PizzaStore
package designpattern.factory.pizzaingredient;public abstract class PizzaStore { public Pizza orderPizza(String type){ Pizza pizza; pizza = createPizza(type); pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; } protected abstract Pizza createPizza(String type);}
(2)Pizza原料工厂:PizzaIngredientFactory
package designpattern.factory.pizzaingredient;public interface PizzaIngredientFactory { public Dough createDough(); public Sauce createSauce(); public Cheese createCheese(); public Veggies[] createVeggies(); public Pepperoni createPepperoni(); public Clams createClam();}
(3)具体的一种类型原料工厂:CheesePizza
package designpattern.factory.pizzaingredient;public class CheesePizza extends Pizza { PizzaIngredientFactory ingredientFactory; public CheesePizza(PizzaIngredientFactory ingredientFactory){ this.ingredientFactory = ingredientFactory; } @Override void prepare() { System.out.println("Preparing " + name); dough = ingredientFactory.createDough(); sauce = ingredientFactory.createSauce(); cheese = ingredientFactory.createCheese(); }}
(4)具体加盟店:NYPizzaStore
package designpattern.factory.pizzaingredient;public class NYPizzaStore extends PizzaStore{ @Override protected Pizza createPizza(String type) { Pizza pizza = null; PizzaIngredientFactory ingredientFactory = new NYPizzaIngredientFactory(); if(type.equals("cheese")){ pizza = new CheesePizza(ingredientFactory); pizza.setName("New York Style Cheese Pizza"); }else if(type.equals("veggie")){ pizza = new VeggiePizza(ingredientFactory); pizza.setName("New York Style Veggie Pizza"); }else if(type.equals("clam")){ pizza = new ClamPizza(ingredientFactory); pizza.setName("New York Style Clam Pizza"); }else if(type.equals("pepperoni")){ pizza = new PepperoniPizza(ingredientFactory); pizza.setName("New York Style Pepperoni Pizza"); } return pizza; }}
加盟店生产pizza演示:
package designpattern.factory.pizzaingredient;public class PizzaTest { public static void main(String[] args) { PizzaStore pizzaStore = new NYPizzaStore(); Pizza pizza = pizzaStore.orderPizza("cheese"); System.out.println("A " + pizza.getName() + " had been ordered. "); }}
0 0
- 2,工厂模式--抽象工厂
- 2 简单工厂模式、工厂模式、抽象工厂模式
- 没有工厂模式(工厂模式2)
- 工厂模式 - 2
- 工厂模式2
- 2、简单工厂模式
- 工厂模式(2)
- 工厂模式-2
- 设计模式2-工厂模式
- 设计模式2(工厂模式)
- 设计模式2-工厂模式
- 设计模式学习(2)工厂模式,抽象工厂模式
- 设计模式-java工厂模式2(抽象工厂模式)
- 设计模式解读之 简单工厂模式&工厂方法模式&抽象工厂模式(2)
- 设计模式(2)工厂模式、工厂方法模式、抽象工厂模式
- (1、2/23)工厂方法模式And抽象工厂模式
- 由浅入深学“工厂模式”(2)
- 由浅入深学“工厂模式”(2)
- app审核提交 注意事项
- 算法模型大全
- Swift笔记:字符串
- C# 多线程
- PHP 单例模式
- 工厂模式(2)
- NO.01 -- Start
- android Home键监听
- 搜索—Problem_1004-Toxophily
- Spring MVC让Web容器启动时自动执行代码
- Java线程池的那些事
- iOS多线程编程之NSOperation
- [PHP实例] 使用PHPZip解压缩文件
- iOS中的initialize与load两个类方法简单理解