设计模式之工厂模式-工厂方法模式

大家好,欢迎来到污污弹公司,今天司小司又接到了一个新活-披萨项目。

来源:凯哥Java(kaigejava)

需求:

披萨项目:

要方便披萨品种的扩展、要便于维护、要能运行时候方便扩展

来看看披萨族设计:

司小司经过分析得到:披萨都需要烘焙(bake)、切割(cut)、包装(box)还有就是披萨原材料准备(prepare)。其中变化的就是prepare准备的原材料。不同披萨的原材料不同,但是都需要进行烘焙、切割、包装。所以,我们这里原材料方法就做抽象的,不具体实现了。经过分析之后得到如下类图:

第一次设计:使用简单工厂模式(可以参考上一篇的司小司面馆项目)发现不行。为什么呢?

随着披萨越来越火,很多地方都要加盟了。如果加盟的话,每个地方都要创建一个简单工厂模式那样,同样的代码,就要创建很多份,在维护的时候,就很麻烦的。

选择第二种设计:工厂方法模式。

先来看看项目结构:

说明:

1:domain:是具体pojo对象。都继承于PizzaAbstract类

其中以BeiJin开头的,都是北京连锁店的。以ShanHai开头的都是上海连锁店的。

2和3是披萨和披萨订单的抽象类

4:具体连锁点的订单类。都继承于PiazzOrderAbstract类

5:测试类

我们先来看看两个抽象类。

PizzaAbstract类:

PizzaOrderAbstract类:

在来看一个北京的greekpizza:

在来看看BeiJinOrderPizza:

测试类:

查看运行结果:

通过上面代码演示,我们可以得到以下:

工厂方法模式设计方案:

将披萨项目里的披萨对象实例化功能抽象成抽象方法,在不同加盟店具体实现功能。

工厂方法模式:

定义了一个创建对象的抽象方法,由子类决定要实例化的类。从这句话中,我们可以知道,工厂方法模式是将对象的实例化(创建)推迟到子类中了。

工厂方法模式和简单工厂模式对比:

简单工厂模式:

根据类的标识,通过工厂对象就可以得到具体类的实例对象了。在工厂对象里面,类对象的实例化如下:

对象的实例化,是在工厂对象里面。

工厂方法模式:

是将对象的创建,抽取出来了。就是创建披萨的方法,抽取到一个具体的类中。

我们在来看看,披萨订单对象:

在具体调用的时候:

PizzaOrderAbstract bjOder = new BeiJinOrderPizza();调用具体的子类。

而对象的实例化,是在子类中进行的。

工厂方法模式通过一个抽象的工厂类来创建工厂,再由工厂通过一定的方法创造一定的对象,这样如果有新的产C出现不需要修改已有代码只要新建一个产品的从子类和工厂的子类就可以啦。

策略模式和工厂模式的区别_设计模式之工厂模式-工厂方法模式相关推荐

  1. 模板设计模式_设计模式实用又简单的模板模式

    这篇文章纯科普向,如题,对这方面了解的可以绕道了,不耽误大家时间了哈 -----------------------------------人工分割线------------------------- ...

  2. java 类爆炸_设计模式系列·类爆炸之 Bridge 模式

    迷之微笑 经过 C 哥的精心指导,消息中心终于上线!代码运行了半个月,稳健无 bug . 王小二托着下腮,看着代码,一抹迷之微笑随之闪现^_^.作为一名有追求的码农,此时的快乐或许只有自己能懂. 消息 ...

  3. java实现备忘录模式_设计模式之第17章-备忘录模式(Java实现)

    设计模式之第17章-备忘录模式(Java实现) 好男人就是我,我就是曾小贤.最近陈赫和张子萱事件闹得那是一个沸沸扬扬.想想曾经每年都有爱情公寓陪伴的我现如今过年没有了爱情公寓总是感觉缺少点什么.不知道 ...

  4. 设计模式(九)模版方法模式

    相关文章 设计模式(一)设计六大原则 设计模式(二)单例模式的七种写法 设计模式(三)建造者模式 设计模式(四)简单工厂模式 设计模式(五)观察者模式 设计模式(六)代理模式 设计模式(七)装饰模式 ...

  5. 策略模式和工厂模式的区别_设计模式系列 — 策略模式

    点赞再看,养成习惯,公众号搜一搜[一角钱技术]关注更多原创技术文章. 本文 GitHub org_hejianhui/JavaStudy 已收录,有我的系列文章. 前言 23种设计模式速记 单例(si ...

  6. 外观模式和代理模式的联系和区别_设计模式之代理模式

    代理模式 Proxy Intro 代理模式,给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用. 在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间 ...

  7. 外观模式和代理模式的联系和区别_设计模式之代理设计模式

    原文首发于微信公众号:jzman-blog,欢迎关注交流! 今天来看一下什么是代理设计模式,顾名思义,代理就是通过中介代替某人做某一件事,对应到我们的程序中就是通过代理对象来控制某个具体对象某个方法的 ...

  8. 米线店结账程序 装饰着模式_设计模式(三)装饰者模式

    装饰者模式是以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案.装饰者模式动态地将责任附加到对象身上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案,比生成子类更加灵活. 通常在继承关系 ...

  9. HeadFir st 设计模式学习笔记8--模板方法模式

    1.这个模式比较简单,我们举⼀个银行贷款申请流程程序的例子(这个并非是书中的例子): 申请贷款,银行要检查这个客户的⼀些事宜,譬如客户收支状况记录.从三个地方拿到他的信 用记录.得到其他已有相关债务信 ...

最新文章

  1. linux脚本重定向到输入,linux shell输入输出重定向
  2. 关闭裁剪功能_4个图片裁剪技巧,瞬间看出Word大神与小白的差距!
  3. Android m 自定义下拉菜单,Android实现动画效果的自定义下拉菜单功能
  4. python的二维数组操作
  5. 优考试在线考试系统计算机,使用优考试在线考试系统解决企业员工考核评比
  6. html循环查询的数据,SQL查询遍历数据方法一 [ 临时表 + While循环]
  7. jQuery 树插件ZTree使用Demo
  8. 三角形数、五边形数和六角形数
  9. android多媒体框架学习 详解
  10. 递归函数与二分查找算法
  11. Android Studio1.4.x JNI开发基础-基本环境配置
  12. html5的文件操作系统,目录 - 基本操作 - DirectoryEntry《 HTML5:文件系统 》
  13. 阿里巴巴的愿景,使命和价值观
  14. 笔记—R语言做相关气泡图
  15. 掌握这个技能,再也不用为面试发愁了
  16. vba rnd_VBA Rnd()函数不正确,应使用什么代替
  17. 响应式设计微网站静态模板,适合游戏、新闻资讯等平台
  18. doraemon的python tcp协议和udp协议
  19. 【故障分析】轴承故障分析(时频图+功率谱)含Matlab源码
  20. 【题解】vijos1093 文科生的烦恼

热门文章

  1. SQL Server 2000 sp4 简体中文版免费在线下载!
  2. python做mysql数据迁移_Python中MySQL数据迁移到MongoDB脚本的方法
  3. [Python]--Anaconda Resources Collection
  4. Matlab参考函数
  5. sql 自动 清理 ldf 日志_阳泉自动转盘式喷砂机
  6. ajax中json和文本的区别,json格式字符串--json对象 【ajax_responseText】重点
  7. 以太网口差分电平_以太网接口学习笔记
  8. 【Leetcode | easy】反转整数
  9. 【UWB】Savitzky Golay filter SG滤波器快速入门并上手使用
  10. 【控制】《现代控制理论》谢克明老师-第3章-线性控制系统的能控性和能观测性