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

原创 2017年11月14日 19:50:41

前言

本文来自《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()灵活变动。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

HeadFirst学习笔记2:抽象工厂模式

抽象工厂方法中,之所以出现CheesePizza这个类,是因为工厂中pizza的馅料不同而已,不管是NY还是chicago制作cheesePizza的方法一样。这种馅料的差异放到了原料工厂去处理,完全...
  • NEOMc
  • NEOMc
  • 2011年09月14日 13:17
  • 858

黑马程序员_学习笔记2交通灯系统中面向对象思想的理解以及工厂模式的应用

---------------------- android培训、java培训、期待与您交流! ----------------------                   “两个石头磨成一个...

学习笔记——JAVA设计模式<2>工厂模式

工厂模式 实现了创建者和调用者的分离 详细分类 简单工厂模式 工厂方法模式 抽象工厂模式 面向对象设计的基本原则 ...

学习笔记_抽象工厂模式

抽象工厂模式,在很多场景下都有应用。   它有以下的优点 1:封装性,每个产品的实现类不是高层模块要关心的,它所要关心 的是接口和抽象类,他不关心对象是如何创建出来,只有工厂类去关心...

工厂模式学习笔记

工厂方法模式(Factory Pattern)是创建型设计模式之一。工厂方法模式是一种结构简单的模式,其在我们平时开发中应用很广泛,也许你不知道,但是你已经使用了无数次改模式了。例如Activity中...
  • siguoyi
  • siguoyi
  • 2016年08月04日 17:12
  • 200

学习笔记_简单工厂模式

举两个例子以快速明白Java中的简单工厂模式: 女娲抟土造人 话说:“天地开辟,未有人民,女娲抟土为人。”女娲需要用土造出一个个的人,但在女娲造出人之前,人的概念只存在于女娲的思想里面。 女...

java学习笔记--工厂模式、实体关系

1.分层意识:数据访问层、业务层、表现层。数据访问层负责基本的数据访问操作,为业务层服务。 2.工厂模式:创建对象的工作由工厂对象来实现,而不是直接new对象。 3.实体关系:实体关系分类:1)继承:...

抽象工厂模式——学习笔记

1.抽象工厂模式——是对产品角色的抽象,面对的问题是多个产品等级结构的系统设计,这是与工厂方法模式最大的区别(工厂方法模式面对的是一个产品等级结构),如果使用多个工厂方法模式来实现,会导致相似的工厂方...

AngularJS学习笔记--使用angular.extend()实现工厂模式

AngularJS之使用angular.extend()实现工厂模式angular提供了extend()这个非常实用的方法,它的作用是将第一个参数以后的参数(可以传入多个参数)合并到第一个参数,即将其...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【学习笔记】工厂模式学习2
举报原因:
原因补充:

(最多只允许输入30个字)