这是一段防爬虫文字,读者可跳过 一个好朋友开了家奶茶店,生意很是红火。 A说:老板,草莓味双皮奶加珍珠。B说:老板,香草味珍珠奶茶加椰果。C说:拿铁一杯谢谢。我说:巧克力瑞纳冰,外加免费谢谢。 老板听得一脸黑线,但还是去了。我呢,看他那么赚钱,也想学两手,也就跟着去了。 该过程涉及三个不同对象:老板、加工机器、不同种类的奶茶。 老板可以用场景类Client表示,加工机器类似于一个工厂,负责制作产品,不同种类的奶茶,它们都是同一个接口下的不同具体实现类,都是奶茶嘛,只是成分不同,口味不同而已。 分析完毕,那么我们就可以把类图画出来: 写的时候,我也发现这种模式有点不太方便,可以发现上面类图有个纰漏,那个string的传参,我下意识的把这个模式和装饰者模式混一起去了。我觉得这个模式和“装饰者”、“建造者”模式有很多相同的地方,但是那两个模式明显要有优势,这个模式的优势就在于:它更简单。 上面那个抽象机器类其实应该用模板会比较通用,成为一个通用接口。 定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使得一个类的实例化延迟到其子类(后面你会发现好多设计模式都能,应该是因为这个设计模式出来的早吧,后面的设计模式都参考了它的思想)。 1、良好的封装性 需要灵活的、可拓展的框架时。 请自己实现一个“俄罗斯方块产生”功能,自己设计。 1、缩小为简单工厂模式 今天先到这里,明天见(抽象工厂模式)。
本文为ImapBox作者“看,未来”原创,我的ImapBox地址为 https://lion-wu.blog.csdn.net/
本篇隶属于我的专栏 – 《设计模式 之 设计模式进阶》https://blog.csdn.net/qq_43762191/category_10059121.html
作者版权,未经允许,禁止转载。老板来杯奶茶
今天我带着几个朋友去给他捧场,到了店里,老板给出了菜单:香草味珍珠奶茶加椰果 草莓味双皮奶加珍珠 拿铁 巧克力瑞纳冰
只见老板把一众拆料摆在桌子上,一会儿加这个材料,一会儿加那个材料,然后放机器上加工一下,打包解决。小故事代码实现
#include<iostream> using namespace std; //奶茶主类 class Milk { public: virtual void set_taste() = 0;//设置口味 virtual void add_burdening() = 0;//加料 }; //双皮奶 class custard :public Milk { public: void set_taste() { cout << "草莓味双皮奶" << endl; } void add_burdening() { cout << "加珍珠" << endl; } }; //珍珠奶茶 class pearl :public Milk { public: void set_taste() { cout << "香草味珍珠奶茶" << endl; } void add_burdening() { cout << "加椰果" << endl; } }; //拿铁 class coffee :public Milk { public: void set_taste() { cout << "拿铁" << endl; } void add_burdening() { cout << "不加料" << endl; } }; //巧克力瑞纳冰 class ruinaice :public Milk { public: void set_taste() { cout << "巧克力瑞纳冰" << endl; } void add_burdening() { cout << "加奶油" << endl; } }; //所有饮品定义完毕,接下来定义一台机器 //template<class T> class abstractMachin { public: virtual void createMilk(Milk *c) = 0; }; //机器具体实现 //template<class T> class Machin :public abstractMachin { public: void createMilk(Milk *c) { c->set_taste(); c->add_burdening(); } }; //现在材料有了,机器也有了,是时候做奶茶了 class Boss { //老板就是那个main() }; int main() { //初始化一个机器 abstractMachin* am = new Machin(); //先做瑞纳冰 Milk* ruina = new ruinaice(); am->createMilk(ruina); return 0; }
感悟
工厂方法的定义
工厂方法模式的应用
优势
2、拓展性优秀
3、屏蔽产品类
4、典型的解耦框架,高层模块只需要知道产品的抽象类,具体实现和它们没关系。使用场景
学以致用
工厂方法模式拓展
2、升级为多个工厂,比方说老板现在不仅卖奶茶,他还要卖香肠、卖果汁、卖汉堡。那他就需要烤汉堡机,烤香肠机、榨汁机、奶茶机,所以我说抽象机器类要用模板。如果觉得前面太简单,可以做一下这个。
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算