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

    1.定义

    定义一个工厂类,通过工厂类来生成需要的对象.

    2.代码实现

    以pizza为例子,需要不同的披萨,比如: 芝士披萨,花甲披萨,意式香肠披萨,蔬菜披萨.

    定义一个抽象类Pizza

    public abstract class Pizza {
        public void prepare() {}
        public void bake() {}
        public void cut() {}
        public void box() {}
    }

    定义抽象类Pizza的子类,四种披萨

    public class CheesePizza extends Pizza {
    
    }
    public class ClamPizza extends Pizza {
    
    }
    public class PepperoniPizza extends Pizza {
    
    }
    public class VeggiePizza extends Pizza {
        
    }

    定义一个工厂类,专门负责生成pizza

    public class SimplePizzaFactory {
        /**
         * 根据传入的参数生成具体的类型
         * @param type 类型
         * @return 根据类型生成的pizza对象
         */
        public Pizza createPizza(String type) {
            Pizza pizza = null;
            
            if (type.equals("cheess")) {
                pizza = new CheesePizza();
            } else if (type.equals("pepperoni")) {
                pizza = new PepperoniPizza();
            } else if (type.equals("veggie")) {
                pizza = new VeggiePizza();
            } else if (type.equals("clam")) {
                pizza = new ClamPizza();
            }
            return pizza;
        }
    }

    接下来就是定义披萨商店

    public class PizzaStore {
        SimplePizzaFactory factory;
    
        public PizzaStore(SimplePizzaFactory factory) {
            super();
            this.factory = factory;
        }
        
        public Pizza orderPizza(String type) {
            Pizza pizza;
            pizza = factory.createPizza(type);
            pizza.prepare();
            pizza.bake();
            pizza.cut();
            pizza.box();
            return pizza;
        }
    }

    可以看到在构造函数中传入之前定义的工厂类,来生成具体的pizza类型,加工后返回给客户

    3.总结

    简单工厂只是定义了一个工厂类,把创建过程封装到这个类中,如果需要生成别的种类的pizza的话还需要定义许多披萨工厂,并且改变传入的披萨工厂类型.

    而且为了获取正确的类型还需要知道传入的是什么披萨工厂,会多增加一层判断,增加代码的复杂程度....

  • 相关阅读:
    Electron踩坑记录
    TypeScript实现设计模式——生成器模式
    在express中使用ES7装饰器构建路由
    微信小程序下载文件(非图片),并校验扩展名。
    防抖与节流
    yarn
    spark
    docker php-fpm中安装GD库
    thinkphp6 多应用路由遇坑记
    CentOS 7 开启SSH远程登录
  • 原文地址:https://www.cnblogs.com/lishuaiqi/p/11111833.html
Copyright © 2011-2022 走看看