【学习笔记】工厂模式学习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()灵活变动。

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

简要学习简单工厂模式与工厂方法模式

    简单工厂模式与工厂方法模式     简单工厂模式,又称静态工厂方法模式。由一个工厂类根据传入的参量决定创建出哪一种具体产品类的实例。 消费者只知道需要哪一种产品类,具体的...
  • u012839304
  • u012839304
  • 2015年07月22日 21:32
  • 376

工厂模式学习总结

工厂模式是创建对象的模式,将创建对象的代码封装在单独的对象便于复用类,便于之后代码的维护。 一,简单工厂         二,工厂方法              工厂方法模式架构       ...
  • kao123yaojinqian
  • kao123yaojinqian
  • 2017年01月13日 11:12
  • 80

CUDA学习笔记二

前言 线程的组织形式对程序的性能影响是至关重要的,本篇博文主要以下面一种情况来介绍线程组织形式: 2D grid 2D block 线程索引 一般,一个矩阵以线性存储在global memory中的...
  • langb2014
  • langb2014
  • 2016年05月08日 23:13
  • 1847

OSG学习笔记(一)

为了实现最终目标,最近需要掌握一门三维渲染引擎来帮助后续在三维虚拟环境下的研究。之前虽然在OSG和OGRE上纠结了一番,但是后来看到OSG是基于场景图的概念,提供一个在OpenGL之上的面向对象的框架...
  • u012209626
  • u012209626
  • 2015年05月13日 17:55
  • 661

大数据学习笔记·城市计算(2)

项目介绍本节介绍大数据能够怎样帮助改进城市规划。这个例子是利用大量出租车的GPS轨迹来收集城市交通网络中有问题的设计。在这个项目中,我们的目标是使用车辆的GPS轨迹、路网数据等交通数据来收集城市道路网...
  • xiang_freedom
  • xiang_freedom
  • 2016年05月21日 23:13
  • 860

斯坦福机器学习公开课学习笔记(1)—机器学习的动机与应用

(转载请注明出处:http://blog.csdn.net/buptgshengod)1.北京
  • gshengod
  • gshengod
  • 2014年06月05日 08:38
  • 2701

卷积神经网络(CNN)学习笔记1:基础入门

卷积神经网络(CNN)学习笔记1:基础入门
  • noter16
  • noter16
  • 2017年02月16日 15:00
  • 664

ActiveMQ学习笔记(上)

公司做智能硬件的,使用ActiveMQ做消息队列,我接手这块,学习了一下,记点笔记,供大家参考 一、ActiveMQ简介 ActiveMQ,名字上看是一种MessageQueue,其实是支持Queu...
  • boyish_
  • boyish_
  • 2016年06月22日 15:20
  • 703

【机器学习-斯坦福】学习笔记2 - 监督学习应用与梯度下降

监督学习应用与梯度下降 本课内容: 1、  线性回归 2、  梯度下降 3、  正规方程组     (复习)监督学习:告诉算法每个样本的正确答案,学习后的算法对新的输入也能输入正确的答案   1...
  • maverick1990
  • maverick1990
  • 2013年09月05日 22:53
  • 9403

CAFFE源码学习笔记之一

单纯的将自己的笔记上的内容一点点搬运过来。 在复习卷积神经网络的同时还能学习一下系统级c++程序的规范和技巧。 ××××××××××××××××× 一、前言 本系列就是要把caffe这样一个系...
  • sinat_22336563
  • sinat_22336563
  • 2017年03月30日 11:18
  • 286
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【学习笔记】工厂模式学习2
举报原因:
原因补充:

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