【学习笔记】工厂模式学习2

前言

本文来自《Head Fist 设计模式》一书的实例,这里仅仅是个人笔记记录
上一篇笔记
http://blog.csdn.net/su749520/article/details/78524122

Pizza加盟店

上文对单个Pizza店进行良好编程习惯的开发,接下来需要继续复用和拓展,即新增基于总店Pizza店的加盟店模式开发。

注意加盟店的特点是:
1.制作流程必须依赖总店;

        // 保持总店的流程
        mPizza.prepare();
        mPizza.bake();
        mPizza.cut();
        mPizza.box();

2.允许加盟店本身特色的灵活运作;

public abstract BasePizza createPizza(String type);

Pizza总店

package com.su.factorymode.my.method;

public abstract class BasePizzaFactory {

    // 奶酪
    public static final String Type_Cheese = "Type_Cheese";
    // 花蛤
    public static final String Type_Clam = "Type_Clam";
    // 希腊
    public static final String Type_Greek = "Type_Greek";
    // 意大利腊肠
    public static final String Type_Pepperoni = "Type_Pepperoni";
    // 素食
    public static final String Type_Veggie = "Type_Veggie";

    /**
     * 加盟店抽象接口
     * 
     * @param type
     * @return
     */
    public abstract BasePizza createPizza(String type);

    /**
     * 1.流程遵循总店
     * 2.允许加盟店本身的灵活变化
     * @param type
     * @return
     */
    public BasePizza orderPizza(String type) {
        // 加盟店根据自身区域特色创建Pizza
        BasePizza mPizza = createPizza(type);

        // 保持总店的流程
        mPizza.prepare();
        mPizza.bake();
        mPizza.cut();
        mPizza.box();

        return mPizza;
    }
}

加盟店

Demo 1

package com.su.factorymode.my.method;

import android.util.Log;

public class ShangHaiPizzaFactory extends BasePizzaFactory {

    private static final String TAG = ShangHaiPizzaFactory.class.getSimpleName();

    /**
     * 上海风味Pizza加盟店
     */
    @Override
    public BasePizza createPizza(String type) {
        Log.d(TAG, "ShangHaiPizzaFactory");
        BasePizza mPizza = null;

        if (BasePizzaFactory.Type_Cheese.equals(type)) {
            mPizza = new ShangHaiCheesePizza();
        } else if (BasePizzaFactory.Type_Clam.equals(type)) {
            mPizza = new ShangHaiClamPizza();
        } else if (BasePizzaFactory.Type_Veggie.equals(type)) {
            mPizza = new ShangHaiVeggiePizza();
        }

        return mPizza;
    }

}

Demo 2

package com.su.factorymode.my.method;

import android.util.Log;

public class ShenZhenPizzaFactory extends BasePizzaFactory {

    private static final String TAG = ShenZhenPizzaFactory.class.getSimpleName();

    /**
     * 深圳风味Pizza加盟店
     */
    @Override
    public BasePizza createPizza(String type) {
        Log.d(TAG, "ShenZhenPizzaFactory");
        BasePizza mPizza = null;

        if (BasePizzaFactory.Type_Cheese.equals(type)) {
            mPizza = new ShenZhenCheesePizza();
        } else if (BasePizzaFactory.Type_Clam.equals(type)) {
            mPizza = new ShenZhenClamPizza();
        } else if (BasePizzaFactory.Type_Veggie.equals(type)) {
            mPizza = new ShenZhenVeggiePizza();
        }

        return mPizza;
    }

}

结语

上述加盟店的操作做到了
1.解耦化,即orderPizze()并不知道createPizze()具体是哪家加盟店参与进来;
2.允许子类灵活变化ShenZhenPizzaFactory 和ShangHaiPizzaFactory ,选择自身特色;

ShenZhenPizzaFactory与ShangHaiPizzaFactory 即获得了BasePizzaFactory 的全部功能,又通过自身的createPizza()灵活变动。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

法迪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值