博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
工厂模式(Factory)-设计模式(一)
阅读量:4186 次
发布时间:2019-05-26

本文共 1224 字,大约阅读时间需要 4 分钟。

作用:

定义一个用于创建对象的接口,让子类决定实例化哪一个类。 Factory Method 使一个类的实例化延迟到其子类。
工厂模式可分为三类,简单工厂模式、工厂方法模式、抽象工厂模式;在本节,我们来讨论一下简单工厂模式和工厂方法模式。

简单工厂模式:

举个简单的例子:
肯德基可以出售两种不同风味的鸡腿,具体卖哪一种呢?由客户决定该给客户卖哪一种。下面给出一个简单的实现用例。

#include
using namespace std;enum CTYPE {COREA, COREB}; class Chicken { public: virtual void Show() = 0; }; //麻辣味鸡腿 class ChickenA: public Chicken { public: void Show() { cout<<"鸡腿,麻辣"<
CreateChicken(COREA)->Show(); delete m_pFactotry; return 0;}

这就是简单的工厂模式,突然有一天,有个吃货给肯德基提议增加黑椒味的鸡腿,这下可难住肯德基了,因为如果我增加的话,我就要改变我自己呀。这不就违反了开放、封闭原则了吗?

于是,工厂方法模式就出现了。
还是以鸡腿为例说明问题吧,毕竟作为一个吃货,吃才是本职。
哎吆,肯德基经过卖鸡腿赚了钱了,这是肯德基就要考虑考虑了。为了顾客分流,肯德基用了洪荒之力开辟两个柜台,一个来卖麻辣味的鸡腿,另一个了卖芝士味鸡腿。这样想吃什么风味的鸡腿就直接去对应的柜台了嘛。

#include
using namespace std; class Chicken { public: virtual void Show() = 0; }; //麻辣味鸡腿 class ChickenA: public Chicken { public: void Show() { cout<<"鸡腿,麻辣"<
CreateChicken()->Show(); Factory *q = new FactoryA(); q->CreateChicken()->Show(); delete q; delete p; return 0;}

当然这样做的结果是,肯德基只要每增加一种口味的鸡腿就要新开辟一块柜台来卖这种口味的鸡腿,为了节约成本,啃得鸡提出了新方案来解决这个问题,就要引出后面的抽象工厂了。好的。抽象工厂模式我们下次来讨论,不见不散!

这是我自己理解的Factory模式。
这里写图片描述
这是网上找的UML图:
这里写图片描述

你可能感兴趣的文章
程序员身上有异味,同事为什么都不会直接告诉他?
查看>>
大数据折射算法“歧视”?王思聪微博抽奖113位,仅有一位男性
查看>>
Java、C、C+ +、PHP、Python分别用来开发什么?一篇文章告诉你!
查看>>
Linux-SHELL常用命令
查看>>
Linux-网络运维基础
查看>>
Linux网络运维-SSH
查看>>
Linux网络运维 -- 配置DHCP服务器
查看>>
Android开发问题记录
查看>>
Verilog编程网站学习——门电路、组合电路、时序电路
查看>>
android——学生信息显示和添加
查看>>
Android——ImageSwitcher轮流显示动画
查看>>
Android——利用手机端的文件存储和SQLite实现一个拍照图片管理系统
查看>>
图像调优1:清晰度相关参数MTF,SFR,MTF50,MTF50P 以及TVL的概念以及换算说明
查看>>
图像调优3: CCM参数的标定
查看>>
ctags在verilog代码浏览中的应用
查看>>
NeoVintageous 在sublime中的使用
查看>>
用ncverilog跑仿真时,如何去除对特定路径的timing检查
查看>>
在ncverilog仿真条件设置中+nospecify ,+notimingcheck 和 +delay_mode_zero之间有什么区别
查看>>
linux下nerdtree安装方法
查看>>
最长回文子串(Go,LeetCode)
查看>>