zoukankan      html  css  js  c++  java
  • 简单工厂模式

    简单工厂模式:

      披萨店需要生产各式各样的披萨,披萨必须经过准备,烘烤,切片,包装几个步骤进行生产,但是可以有各种各样的品种,比如奶酪披萨,蛤蜊披萨,意大利披萨,蔬菜披萨等等。

    但是各个地方的人又有不同的口味,比如原生口味,重庆风味,湖南风味等等。

      代码实现:

    1,创建披萨接口

    package factorymode.simplefactory;
    
    /**
     * @ClassName Pizaa
     * @Description 定义披萨接口
     * @Author liuyi
     * @Date 2020/6/15 20:50
     * @Version 1.0
     */
    public interface Pizaa {
    
        //准备
        public void prepare();
        //烘烤
        public void bake();
        //切片
        public void cut();
        //包装
        public void box();
    
    }
    

    2,创建四种原生口味的披萨

    package factorymode.simplefactory;
    
    /**
     * @ClassName CheesePizza
     * @Description 奶酪披萨
     * @Author liuyi
     * @Date 2020/6/15 20:58
     * @Version 1.0
     */
    public class CheesePizza implements Pizaa{
        @Override
        public void prepare() {
            System.out.println("准备生产奶酪披萨");
        }
    
        @Override
        public void bake() {
            System.out.println("烘烤奶酪披萨");
        }
    
        @Override
        public void cut() {
            System.out.println("切片奶酪披萨");
        }
    
        @Override
        public void box() {
            System.out.println("包装奶酪披萨");
        }
    }
    

      

    package factorymode.simplefactory;
    
    /**
     * @ClassName ClamPizza
     * @Description 蛤蜊披萨
     * @Author liuyi
     * @Date 2020/6/15 21:00
     * @Version 1.0
     */
    public class ClamPizza implements Pizaa{
        @Override
        public void prepare() {
            System.out.println("准备生产蛤蜊披萨");
        }
    
        @Override
        public void bake() {
            System.out.println("烘烤蛤蜊披萨");
        }
    
        @Override
        public void cut() {
            System.out.println("切片蛤蜊披萨");
        }
    
        @Override
        public void box() {
            System.out.println("包装蛤蜊披萨");
        }
    }
    

      

    package factorymode.simplefactory;
    
    /**
     * @ClassName PepperoniPizza
     * @Description 意大利披萨
     * @Author liuyi
     * @Date 2020/6/15 21:01
     * @Version 1.0
     */
    public class PepperoniPizza implements Pizaa{
        @Override
        public void prepare() {
            System.out.println("准备生产意大利披萨");
        }
    
        @Override
        public void bake() {
            System.out.println("烘烤意大利披萨");
        }
    
        @Override
        public void cut() {
            System.out.println("切片意大利披萨");
        }
    
        @Override
        public void box() {
            System.out.println("包装意大利披萨");
        }
    }
    

      

    package factorymode.simplefactory;
    
    /**
     * @ClassName VeggiePIzza
     * @Description 蔬菜披萨
     * @Author liuyi
     * @Date 2020/6/15 21:00
     * @Version 1.0
     */
    public class VeggiePIzza implements Pizaa{
        @Override
        public void prepare() {
            System.out.println("准备生产蔬菜披萨");
        }
    
        @Override
        public void bake() {
            System.out.println("烘烤蔬菜披萨");
        }
    
        @Override
        public void cut() {
            System.out.println("切片蔬菜披萨");
        }
    
        @Override
        public void box() {
            System.out.println("包装蔬菜披萨");
        }
    }
    

    3,定义简单工厂,用来生产披萨

    package factorymode.simplefactory;
    
    /**
     * @ClassName SimplePizzaFactory
     * @Description 生产披萨的简单工厂
     * @Author liuyi
     * @Date 2020/6/15 21:03
     * @Version 1.0
     */
    public class SimplePizzaFactory {
        public Pizaa createPizza(String type){
            Pizaa pizaa = null;
            switch (type){
                case "cheese":
                    pizaa = new CheesePizza();
                    break;
                case "clam":
                    pizaa = new ClamPizza();
                    break;
                case "pepperoni":
                    pizaa = new PepperoniPizza();
                    break;
                case "veggie":
                    pizaa = new VeggiePIzza();
                    break;
            }
            return pizaa;
        }
    }
    

    4,定义购买披萨的商店

    package factorymode.simplefactory;
    
    /**
     * @ClassName PizzaStrore
     * @Description 定义购买披萨的商店
     * @Author liuyi
     * @Date 2020/6/15 21:07
     * @Version 1.0
     */
    public class PizzaStrore {
        SimplePizzaFactory factory;
        public PizzaStrore(SimplePizzaFactory factory){
            this.factory = factory;
        }
    
        //订购披萨方法
        public Pizaa orderPizza(String type){
            Pizaa pizaa;
            pizaa = factory.createPizza(type);
            pizaa.prepare();
            pizaa.bake();
            pizaa.cut();
            pizaa.box();
            return pizaa;
        }
    }
    

      代码的实现很简单,就是把创建具体披萨种类,也就是具体的对象交给了简单工厂也就是SimplePizzaFactory去创建。这样做的目的就是让我们的程序和具体类解耦。简单的说法就是不在程序中直接new 一个对象。

    那么这样做到底有什么好处呢?比如如果不用工厂去获取具体的实现类,我们在程序中new 了N多个具体类,如果这个类发生了改变,比如需要添加一个有参构造,那我们需要修改N个地方,但是如果用工厂的方式去获取,

    我们只需要修改工厂这一个类即可。

  • 相关阅读:
    IIS 您要访问的网页有问题,无法显示!
    windows系统添加删除用户命令!
    ASP跨域调用Webservices方法
    ASP 编码转换(乱码问题解决)
    Jquery控制滚动显示欢迎字幕v2
    iframe框架嵌套技巧(全屏,去双滚动条)
    ASP CDONTS.NEWMAIL组件发送电邮(附下载)
    ASP FORM表单提交判断
    使用js代码将HTML Table导出为Excel
    获得第二大的元素
  • 原文地址:https://www.cnblogs.com/liu-yi/p/13138447.html
Copyright © 2011-2022 走看看