zoukankan      html  css  js  c++  java
  • HeadFirst设计模式---抽象工厂

    类图

    抽象披萨商店类

    public abstract class PizzaStore {
        public void orderPizza(String type) {
            AbstractPizza abstractPizza = this.createPizza(type);
            abstractPizza.prepare();
            abstractPizza.cut();
            abstractPizza.bake();
            abstractPizza.box();
        } 
        //子类实现
        public abstract AbstractPizza createPizza(String type);
    
    }
    

    实体披萨商店

    public class ChicagoPizzaStore extends PizzaStore {
        public AbstractPizza createPizza(String type) {
           AbstractPizza pizza = null;
            if ("cheesePizza".equals(type)) {
                pizza = new CheeseAbstractPizza();
            } else if ("greekPizza".equals(type)) {
                pizza = new GreekAbstractPizza();
            } else if ("pepperoniPizza".equals(type)) {
                pizza = new PepperoniAbstractPizza();
            }
            return pizza;
        }
    }
    public class NYPizzaStore extends PizzaStore {
        public AbstractPizza createPizza(String type) {
           AbstractPizza pizza = null;
            if ("cheesePizza".equals(type)) {
                pizza = new CheeseAbstractPizza();
            } else if ("greekPizza".equals(type)) {
                pizza = new GreekAbstractPizza();
            } else if ("pepperoniPizza".equals(type)) {
                pizza = new PepperoniAbstractPizza();
            }
            return pizza;
        }
    }
    

    抽象披萨

    public abstract class AbstractPizza {
        public void prepare() {
            System.out.println("prepare pizza");
        }
        public void bake(){
            System.out.println("bake pizza");
        }
        public void cut(){
            System.out.println("cut pizza");
        }
        public void box(){
            System.out.println("pizza box");
        }
    }
    

    实体披萨

    public class CheeseAbstractPizza extends AbstractPizza {
        @Override
        public void prepare() {
            System.out.println("prepare CheesePizza");
        }
    }
    public class GreekAbstractPizza extends AbstractPizza {
        @Override
        public void prepare() {
            System.out.println("prepare GreekPizza");
        }
    }
    public class PepperoniAbstractPizza extends AbstractPizza {
        @Override
        public void prepare() {
            System.out.println("prepare PepperoniPizza");
        }
    }
    

    运行

    public class Tester {
        public static void main(String[] args) {
            PizzaStore pizzaStore = new NYPizzaStore();
            PizzaStore pizzaStore1 = new ChicagoPizzaStore();
            System.out.println(pizzaStore.createPizza("greekPizza"));
            System.out.println(pizzaStore1.createPizza("pepperoniPizza"));
        }
    }
    

    总结

    1. 面向接口编程,扩展开放
    2. 父类不需要知道子类的具体实现
  • 相关阅读:
    AS报错
    第二章课下测试补交博客
    第七章课下测试总结
    2017-2018-1 20155235 20155211 实验四 外设驱动程序设计
    2017-2018-1 20155235 《信息安全系统设计基础》第十一周学习总结
    pwd命令的实现
    2017-2018-1 20155235 实验三 实时系统 实验内容
    2017-2018-1 20155235 《信息安全系统设计基础》第九周学习总结
    20155219 20155224 20155235 信息安全技术概论 第三次实验报告
    2017-2018-1 20155235 《信息安全系统设计基础》第八周学习总结
  • 原文地址:https://www.cnblogs.com/Lollipop_Hsu/p/11986323.html
Copyright © 2011-2022 走看看