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的话还需要定义许多披萨工厂,并且改变传入的披萨工厂类型.

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

  • 相关阅读:
    leetcode-23-DynamicProgramming-1
    perl-basic-数组操作
    R-data.table
    perl-basic-分支&循环
    neo4j3.0多数库切换
    Neo4j下载与使用
    python中导入模块的注意点
    python 一个.py文件如何调用另一个.py文件中的类和函数
    理解Python中的类对象、实例对象、属性、方法
    flowable+tomcat部署flowable项目,在线画流程图
  • 原文地址:https://www.cnblogs.com/lishuaiqi/p/11111833.html
Copyright © 2011-2022 走看看