• 设计模式——工厂模式


    《Head first 设计模式》P135的最后一个问答,简单工厂工厂方法之间的差异:

    /*
     *P116,简单工厂
     */
    public class PizzaStore {
        SimplePizzaFactory factory;
        public PizzaStore(SimplePizzaFactory factory) {
            this.factory = factory;
        }
        public Pizza orderPizza(String type) {
            pizza = factory.createPizza(type);
            //TODO
        }
    }
    
    //factory.createPizza(type)
    if(type.equals("cheese")) {
        pizza = new XXXPizza();
    } else if(type.equals("yyy")) {
        pizza = new YYYPizza();
    } else if(type.equals("zzz")) {
        pizza = new ZZZPizza();
    }
    
    /*
     *工厂方法
     */
     public abstract class PizzaStore {
    
        public Pizza orderPizza(String type) {
            pizza = createPizza(type);
            //TODO
        }
        protected abstract Pizza createPizza(String type);//具体怎么create交给子类实现
    }

    简单工厂的那些createPizza方法在编写时已经写死,在运行时就是这么些的选择。如果想运行时,在多个方法间切换,就需要运用多态,比如用到工厂的接口、抽象类、父类,public PizzaStore(PizzaFactory factory)将SimplePizzaFactory抽象成更一般化的PizzaFactory,这样就可以根据传入的参数,确定具体的createPizza的方法了。
    按照上述修改和额外的改动(将成员变量PizzaFactory的抽象往上拉到了类PizzaStore抽象),简单工厂就变成了工厂方法。

  • 相关阅读:
    ADHOC Report 配置
    html tags
    Stingray验证机制
    常用jQuery知识
    Communication API
    stingray前端架构总体设计及运行过程
    REP report开发技巧
    WorkFlow业务介绍
    MySQL auto_increment初始值设置
    SQL Server中order by的使用,我们来填坑
  • 原文地址:https://www.cnblogs.com/season-peng/p/6713481.html
Copyright © 2020-2023  润新知