抽象工厂方法
来源:互联网 发布:淘宝怎么设置客服接待 编辑:程序博客网 时间:2024/05/29 03:45
抽象工厂方法:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
1. 披萨基类
public abstract class Pizza { protected String name; protected Dough dough; protected Sauce sauce; protected Veggies veggies[]; protected Cheese cheese; protected Clams clams; public abstract void prepare(); public void bake(){ System.out.println("Bake for 25 minuts at 350"); } public void cut(){ System.out.println("Cutting the pizza into diagonal slices"); } public void box(){ System.out.println("Place pizza in official PizzaStore box"); } public abstract void setName(String name); @Override public String toString() { StringBuilder content = new StringBuilder(); content.append("Pizza [").append(" name = ").append(name); if(dough != null){ content.append(", dough = ").append(dough.getName()); } if(sauce != null){ content.append(", sauce = ").append(sauce.getName()); } if(cheese != null){ content.append(", cheese = ").append(cheese.getName()); } if(clams != null){ content.append(", clams = ").append(clams.getName()); } if(veggies != null){ content.append(", veggies = [ "); for (Veggies veggie : veggies) { content.append(veggie.getName()); } content.append(" ]"); } content.append(" ]"); return content.toString(); }}
2. 披萨派生类
public class CheesePizza extends Pizza { private PizzaIngredientFactory factory; public CheesePizza(PizzaIngredientFactory factory) { super(); this.factory = factory; } @Override public void prepare() { System.out.println("Preparing " + name); super.dough = factory.createDough(); super.sauce = factory.createSauce(); super.cheese = factory.createCheese(); } @Override public void setName(String name) { super.name = name; }}public class ClamPizza extends Pizza { private PizzaIngredientFactory factory; public ClamPizza(PizzaIngredientFactory factory) { super(); this.factory = factory; } @Override public void prepare() { System.out.println("Preparing " + name); super.dough = factory.createDough(); super.sauce = factory.createSauce(); super.cheese = factory.createCheese(); super.clams = factory.createClam(); } @Override public void setName(String name) { super.name = name; }}
3. 披萨工厂基类
public abstract class AbstractPizzaFactory { public Pizza orderPizza(String type){ Pizza pizza = createPizza(type); pizza.prepare(); return pizza; } public abstract Pizza createPizza(String type);}
4. 披萨工厂派生类
public class NYPizzaFactory extends AbstractPizzaFactory{ private PizzaIngredientFactory factory; public NYPizzaFactory(PizzaIngredientFactory factory) { super(); this.factory = factory; } @Override public Pizza createPizza(String type) { Pizza pizza = null; if("cheese".equals(type)){ pizza = new CheesePizza(factory); pizza.setName("New York Style Cheese Pizza"); }else if("clam".equals(type)){ pizza = new ClamPizza(factory); pizza.setName("New York Style Clam pizza"); } return pizza; }}public class ChicagoPizzaFactory extends AbstractPizzaFactory{ private PizzaIngredientFactory factory; public ChicagoPizzaFactory(PizzaIngredientFactory factory) { super(); this.factory = factory; } @Override public Pizza createPizza(String type) { Pizza pizza = null; if("cheese".equals(type)){ pizza = new CheesePizza(factory); pizza.setName("Chicago Style Cheese Pizza"); }else if("clam".equals(type)){ pizza = new ClamPizza(factory); pizza.setName("Chicago Style Clam pizza"); } return pizza; }}
5. 原料工厂接口
public interface PizzaIngredientFactory { Dough createDough(); Sauce createSauce(); Cheese createCheese(); Veggies[] createVeggies(); Pepperoni createPepperoni(); Clams createClam();}
6. 原料抽象工厂
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() { return new Veggies[]{new Garlic(),new Mushroom(),new Onion(), new RedPepper()}; } public Pepperoni createPepperoni() { return new SlicedPepperoni(); } public Clams createClam() { return new FreshClams(); }}public class ChicagoPizzaIngredientFactory implements PizzaIngredientFactory{ public Dough createDough() { return new ThinCrustDough(); } public Sauce createSauce() { return new MarinaraSauce(); } public Cheese createCheese() { return new ReggianoCheese(); } public Veggies[] createVeggies() { return new Veggies[]{new RedPepper()}; } public Pepperoni createPepperoni() { return new SlicedPepperoni(); } public Clams createClam() { return new FreshClams(); }}
7.原料
public abstract class Cheese { public abstract String getName(); }public class ReggianoCheese extends Cheese{ @Override public String getName() { return "ReggianoCheese"; }}public abstract class Clams { public abstract String getName();}public class FreshClams extends Clams{ @Override public String getName() { return "FreshClams"; }}public abstract class Dough { public abstract String getName();}public class ThinCrustDough extends Dough{ @Override public String getName() { return "ThinCrustDough"; }}public abstract class Pepperoni { public abstract String getName();}public class SlicedPepperoni extends Pepperoni{ @Override public String getName() { return "SlicedPepperoni"; }}public abstract class Sauce { public abstract String getName();}public class MarinaraSauce extends Sauce{ @Override public String getName() { return "MarinaraSauce"; }}public abstract class Veggies { public abstract String getName();}public class Garlic extends Veggies{ @Override public String getName() { return "Garlic"; }}public class Mushroom extends Veggies{ @Override public String getName() { return "Mushroom"; }}public class Onion extends Veggies{ @Override public String getName() { return "Onion"; }}public class RedPepper extends Veggies{ @Override public String getName() { return "RedPepper"; }}
8. 测试
public class AbstractFactoryTest { public static void main(String[] args) { //选择原料抽象工厂 PizzaIngredientFactory nyIngredFactory = new NYPizzaIngredientFactory(); PizzaIngredientFactory chicagoIngredFactory = new ChicagoPizzaIngredientFactory(); //选择披萨工厂 NYPizzaFactory nyPizzaFactory = new NYPizzaFactory(nyIngredFactory); ChicagoPizzaFactory chicagoPizzaFactory = new ChicagoPizzaFactory(chicagoIngredFactory); Pizza nyCheesePizza = nyPizzaFactory.orderPizza("cheese"); Pizza chicagoClamPizza = chicagoPizzaFactory.orderPizza("clam"); System.out.println(nyCheesePizza.toString()); System.out.println(chicagoClamPizza.toString()); }}
9. 运行结果
Preparing New York Style Cheese PizzaPreparing Chicago Style Clam pizzaPizza [ name = New York Style Cheese Pizza, dough = ThinCrustDough, sauce = MarinaraSauce, cheese = ReggianoCheese ]Pizza [ name = Chicago Style Clam pizza, dough = ThinCrustDough, sauce = MarinaraSauce, cheese = ReggianoCheese, clams = FreshClams ]
阅读全文
0 0
- 抽象工厂 工厂方法
- 工厂方法 AND 抽象工厂
- 工厂方法,抽象工厂模式
- 工厂方法与抽象工厂
- 工厂方法和抽象工厂
- 工厂方法和抽象工厂
- 工厂方法之抽象工厂
- 工厂方法和抽象工厂
- 工厂方法VS抽象工厂
- 工厂方法和抽象工厂
- 工厂方法 VS 抽象工厂
- 工厂方法PK抽象工厂
- 工厂方法与抽象工厂
- 抽象工厂方法
- 抽象工厂方法
- Python 抽象工厂方法
- 抽象的工厂方法
- 抽象工厂方法
- Hive的分桶详解
- 数据结构8————串的BF匹配模式和KMP匹配模式
- 关键字--exists用法
- [USACO 2013 Jan]Island Travels
- 单例详解
- 抽象工厂方法
- 开发日记 X
- 排列(康托展开)
- 理解与配置Android studio中的gradle
- 数据结构: 单链表排序
- “删除重复元素”:保留两个
- [队内测试Day10.22T1][bzoj1821]部落划分 Group
- JZ2440 第7章 内存管理单元 MMU
- 22.WebBrowser中JS和C++代码互相调用