Head First设计模式-简单工厂模式

来源:互联网 发布:淘宝拍卖的画是真的吗 编辑:程序博客网 时间:2024/05/16 04:44

一、简单工厂模式

       PizzaStore.java

public class PizzaStore {        SimplePizzaFactory factory;//多用组合,少用继承        public PizzaStore(SimplePizzaFactory factory) {                this.factory = factory;        }        public Pizza orderPizza(String type) {                Pizza pizza;                pizza = factory.createPizza(type);                pizza.prepare();                pizza.bake();//面向接口编程                pizza.cut();                pizza.box();                return pizza;        }}

       SimplePizzaFactory.java

public class SimplePizzaFactory {        public Pizza createPizza(String type) {                Pizza pizza = null;                if (type.equals("cheese")) {                        pizza = new CheesePizza();                } else if (type.equals("pepperoni")) {                        pizza = new PepperoniPizza();                }                return pizza;        }}

        Pizza.java

import java.util.ArrayList;abstract public class Pizza {String name;String dough;String sauce;ArrayList toppings = new ArrayList();public String getName() {return name;}public void prepare() {System.out.println("Preparing " + name);}public void bake() {System.out.println("Baking " + name);}public void cut() {System.out.println("Cutting " + name);}public void box() {System.out.println("Boxing " + name);}public String toString() {// code to display pizza name and ingredientsStringBuffer display = new StringBuffer();display.append("---- " + name + " ----\n");display.append(dough + "\n");display.append(sauce + "\n");for (int i = 0; i < toppings.size(); i++) {display.append((String )toppings.get(i) + "\n");}return display.toString();}}

         CheesePizza.java 

public class CheesePizza extends Pizza {        public CheesePizza() {                name = "Cheese Pizza";                dough = "Regular Crust";                sauce = "Marinara Pizza Sauce";                toppings.add("Fresh Mozzarella");                toppings.add("Parmesan");        }}

        PepperoniPizza.java

public class PepperoniPizza extends Pizza {        public PepperoniPizza() {                name = "Pepperoni Pizza";                dough = "Crust";                sauce = "Marinara sauce";                toppings.add("Sliced Pepperoni");                toppings.add("Sliced Onion");                toppings.add("Grated parmesan cheese");        }}

          PizzaTestDrive.java

public class PizzaTestDrive {        public static void main(String[] args) {                SimplePizzaFactory factory = new SimplePizzaFactory();                PizzaStore store = new PizzaStore(factory);                Pizza pizza = store.orderPizza("cheese");                System.out.println("We ordered a " + pizza.getName() + "\n");                pizza = store.orderPizza("pepperoni");                System.out.println("We ordered a " + pizza.getName() + "\n");        }}

二、结果如下:


 三、原来creatPizza的位置代码如下:

 if (type.equals("cheese")) {                        pizza = new CheesePizza();                } else if (type.equals("pepperoni")) {                        pizza = new PepperoniPizza();                } else if (type.equals("clam")) {                        pizza = new ClamPizza();                } else if (type.equals("veggie")) {                        pizza = new VeggiePizza();                }                return pizza;

     因为此部分是变化的,简单工厂模式封装了变化。实现了松耦合。

       

原创粉丝点击