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. 父类不需要知道子类的具体实现
  • 相关阅读:
    正则表达式判断手机号是否11位
    php-流程管理(发起流程和审核流程)
    php-流程管理(新建流程)(php+Ajax)
    php-人员权限管理(RBAC)
    状态压缩DP
    树形DP
    Broken Keyboard UVA 11988 数组实现链表
    Trees in a Wood UVA
    POJ1061 青蛙的约会 拓展欧几里得
    UVA10215The Largest/Smallest Box(小数精度)
  • 原文地址:https://www.cnblogs.com/Lollipop_Hsu/p/11986323.html
Copyright © 2011-2022 走看看