美文网首页
工厂方法模式-披萨订购

工厂方法模式-披萨订购

作者: Shaw_Young | 来源:发表于2020-10-14 17:32 被阅读0次

    工厂方法模式介绍

    工厂方法模式设计方案:将披萨项目的实例化功能抽象成抽象方法,在不同的口味点餐子类中具体实现。
    工厂方法模式:定义了一个创建对象的抽象方法,由子类决定要实例化的类。工厂方法模式将对象的实例化推迟到子类

    /**
     * 将Pizza类做成抽象类
     *
     * @author Shaw_Young
     * @date 2020/9/3 20:29
     */
    public abstract class Pizza {
    
        /**
         * 名字
         */
        protected String name;
    
        /**
         * 准备原材料,不同的披萨不一样,因此,我们做成抽象方法
         */
        public abstract void prepare();
    
        /**
         * 烘烤
         */
        public void bake() {
            System.out.println(name + " baking;");
        }
    
        /**
         * 切割
         */
        public void cut() {
            System.out.println(name + " cutting;");
        }
    
        /**
         * 打包
         */
        public void box() {
            System.out.println(name + " boxing;");
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    
    /**
     * @author Shaw_Young
     * @date 2020/9/26 20:52
     */
    public class BJCheesePizza extends Pizza {
        @Override
        public void prepare() {
            setName("北京的奶酪pizza");
            System.out.println(" 北京的奶酪pizza 准备原材料 ");
        }
    }
    
    /**
     * @author Shaw_Young
     * @date 2020/9/26 20:53
     */
    public class BJPepperPizza extends Pizza {
        @Override
        public void prepare() {
            setName("北京的胡椒pizza");
            System.out.println(" 北京的胡椒pizza 准备原材料 ");
        }
    }
    
    /**
     * @author Shaw_Young
     * @date 2020/9/26 20:57
     */
    public class LDCheesePizza extends Pizza {
        @Override
        public void prepare() {
            setName("伦敦的奶酪pizza");
            System.out.println(" 伦敦的奶酪pizza 准备原材料 ");
        }
    }
    
    /**
     * @author Shaw_Young
     * @date 2020/9/26 20:55
     */
    public class LDPepperPizza extends Pizza {
        @Override
        public void prepare() {
            setName("伦敦的胡椒pizza");
            System.out.println(" 伦敦的胡椒pizza 准备原材料 ");
        }
    }
    
    /**
     * @author Shaw_Young
     * @date 2020/9/3 20:44
     */
    public abstract class OrderPizza {
    
        /**
         * 定义一个抽象方法,createPizza,让各个工厂子类自己实现
         */
        abstract Pizza createPizza(String orderType);
    
        /**
         * 构造器
         */
        public OrderPizza() {
            Pizza pizza = null;
            String orderType;//订购披萨的类型
            do {
                orderType = getType();
                pizza = createPizza(orderType);
                //输出pizza制作过程
                pizza.prepare();
                pizza.bake();
                pizza.cut();
                pizza.box();
            } while (true);
        }
    
        /**
         * 写一个方法,可以获取客户希望订购的披萨种类
         */
        private String getType() {
            try {
                BufferedReader strin = new BufferedReader(new InputStreamReader(System.in));
                System.out.println("input pizza type:");
                String str = strin.readLine();
                return str;
            } catch (IOException e) {
                e.printStackTrace();
                return "";
            }
        }
    
    }
    
    /**
     * @author Shaw_Young
     * @date 2020/9/26 21:04
     */
    public class BJOrderPizza extends OrderPizza {
        @Override
        Pizza createPizza(String orderType) {
            Pizza pizza = null;
            if (orderType.equals("cheese")) {
                pizza = new BJCheesePizza();
            } else if (orderType.equals("pepper")) {
                pizza = new BJPepperPizza();
            }
            return pizza;
        }
    }
    
    /**
     * @author Shaw_Young
     * @date 2020/9/26 21:04
     */
    public class LDOrderPizza extends OrderPizza {
        @Override
        Pizza createPizza(String orderType) {
            Pizza pizza = null;
            if (orderType.equals("cheese")) {
                pizza = new LDCheesePizza();
            } else if (orderType.equals("pepper")) {
                pizza = new LDPepperPizza();
            }
            return pizza;
        }
    }
    
    /**
     * @author Shaw_Young
     * @date 2020/9/26 21:10
     */
    public class PizzaStore {
    
        public static void main(String[] args) {
            // 创建北京口味的各种Pizza
            //new BJOrderPizza();
            // 创建伦敦口味的各种Pizza
            new LDOrderPizza();
        }
    
    }
    

    相关文章

      网友评论

          本文标题:工厂方法模式-披萨订购

          本文链接:https://www.haomeiwen.com/subject/vvxasktx.html