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. 父类不需要知道子类的具体实现
  • 相关阅读:
    寒假补习记录_4
    寒假补习记录_3
    寒假补习记录_2
    寒假补习记录_1
    公文流转系统编程
    Javaweb编程
    转:在静态方法中访问类的实例成员
    Java字段初始化规律
    原码,反码,补码浅谈
    java第二节课课后
  • 原文地址:https://www.cnblogs.com/Lollipop_Hsu/p/11986323.html
Copyright © 2011-2022 走看看