Head First设计模式笔记(工厂方法模式)

xiaoxiao2021-02-28  77

工厂方法模式:通过让子类决定该创建的对象是什么,来达到将对象创建的过程封装的目的。工厂方法让类把实例化推迟到子类 抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类 1.Pizza类

package com.TWO; import java.util.ArrayList; import java.util.List; public abstract class Pizza { //名称 String name; //面团类型 String dough; //酱料类型 String sauce; //一套佐料 List toppings = new ArrayList(); void prepare(){ System.out.println("preparing "+ name); System.out.println("Tossing dough..."); System.out.println("Adding sauce。。。"); System.out.println("adding toppings:"); for(int i= 0;i< toppings.size();i++){ System.out.println(" "+ toppings.get(i)); } } void bake(){ System.out.println("Bake for 25 minutes at 350"); } void cut(){ System.out.println("cutting the pizza into diagonal slices"); } void box(){ System.out.println("Place pizza in official PizzaStore box"); } }

2.ChicagoStyleCheesePizza类

package com.TWO; public class ChicagoStyleCheesePizza extends Pizza{ public ChicagoStyleCheesePizza(){ name = "chicago style deep dish cheese pizza"; dough = "extra thick crust dough"; sauce = "plum tomato sauce"; toppings.add("shredded mozzarella cheese"); } //重写切的方式 void cut(){ System.out.println("cutting the pizza into square slices"); } }

3.NYStyleCheesePizza类

package com.TWO; public class NYStyleCheesePizza extends Pizza{ public NYStyleCheesePizza(){ name = "NY Style sauce and cheese pizza"; dough = "Thin Crust dough"; sauce = "Marinara sauce"; toppings.add("Grated Reggiano cheese"); } }

还有其他的pizza实现了 继承Pizza … 4.PizzaStore 类,真正的Pizza类需要在子类中创建 ,这个也符合工厂方法模式的思想

package com.TWO; public abstract class PizzaStore { public Pizza orderPizza(String type){ Pizza pizza = createPizza(type); pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; } protected abstract Pizza createPizza(String type); //其他方法 }

5.ChicagoPizzaStore

package com.TWO; public class ChicagoPizzaStore extends PizzaStore{ @Override protected Pizza createPizza(String type) { Pizza pizza = null; if(type.equals("cheese")){ pizza = new ChicagoStyleCheesePizza(); }else if(type.equals("pepperoni")){ pizza = new ChicagoStylePepperoniPizza(); }else if(type.equals("clam")){ pizza = new ChicagoStyleClamPizza(); }else if(type.equals("veggie")){ pizza = new ChicagoStyleVeggiePizza(); } return pizza; } }

6.NYPizzaStore

package com.TWO; public class NYPizzaStore extends PizzaStore{ @Override protected Pizza createPizza(String type) { Pizza pizza = null; if(type.equals("cheese")){ pizza = new NYStyleCheesePizza(); }else if(type.equals("pepperoni")){ pizza = new NYStylePepperoniPizza(); }else if(type.equals("clam")){ pizza = new NYStyleClamPizza(); }else if(type.equals("veggie")){ pizza = new NYStyleVeggiePizza(); } return pizza; } }

7.PizzaTestDrive测试类

package com.TWO; public class PizzaTestDrive { public static void main(String[] args){ PizzaStore nyStore = new NYPizzaStore(); PizzaStore chicagoStore = new ChicagoPizzaStore(); Pizza pizza = nyStore.orderPizza("cheese"); System.out.println(" 订购了一个" + pizza.name); } }
转载请注明原文地址: https://www.6miu.com/read-26902.html

最新回复(0)