zoukankan      html  css  js  c++  java
  • 设计模式——工厂模式

    《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抽象),简单工厂就变成了工厂方法。

  • 相关阅读:
    BOM与DOM
    CSS中的长度单位及颜色表示
    关于display:grid layout
    关于position
    简单的注册表单
    We重邮
    APP定制开发的完整流程
    国内移动广告平台的混战大盘点
    Mobile App Monetization, Analysis & Mediation – Google AdMob
    代码优化
  • 原文地址:https://www.cnblogs.com/season-peng/p/6713481.html
Copyright © 2011-2022 走看看