设计模式15抽象工厂模式
抽象工厂模式
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
ProductA和ProductB是两个抽象产品,之所以为抽象,是因为它们都有可能有两种不同的实现
而ProductA1、ProductA2和ProductB1、ProductB2就是对两个抽象产品的具体分类的实现
IFactory是一个抽象工厂接口,它里面应该包含所有的产品创建的抽象方法。而ConcreteFactoryA和ConcreteFactoryB就是具体的工厂
通常是在运行时刻再创建一个ConcreteFactory类的实例,这个具体的工厂再创建具有特定实现的产品对象,也就是说,为创建不同的产品对象,客户端应使用不同的具体工厂。 #include using namespace std; class Product { public: virtual void Show() const = 0; }; class ProductA1 : public Product { public: virtual void Show() const override { cout << "ProductA1" << endl; } }; class ProductA2 : public Product { public: virtual void Show() const override { cout << "ProductA2" << endl; } }; class ProductB1 : public Product { public: virtual void Show() const override { cout << "ProductB1" << endl; } }; class ProductB2 : public Product { public: virtual void Show() const override { cout << "ProductB2" << endl; } }; class IFactory { public: virtual Product* CreateProductA() = 0; virtual Product* CreateProductB() = 0; }; class ConcreteFactoryA : public IFactory { public: virtual Product* CreateProductA() override { return new ProductA1; } virtual Product* CreateProductB() override { return new ProductB1; } }; class ConcreteFactoryB : public IFactory { public: virtual Product* CreateProductA() override { return new ProductA2; } virtual Product* CreateProductB() override { return new ProductB2; } }; int main(int argc, char const *argv[]) { ConcreteFactoryA fa; Product *a1 = fa.CreateProductA(); Product *b1 = fa.CreateProductB(); a1->Show(); b1->Show(); delete a1; delete b1; ConcreteFactoryB fb; Product *a2 = fb.CreateProductA(); Product *b2 = fb.CreateProductB(); a2->Show(); b2->Show(); delete a2; delete b2; return 0; }
公众号: cpp_yang
个人微信: yangxg_cxy
今日头条: 程序员杨小哥
B站: https://space.bilibili.com/473029051
知乎: https://www.zhihu.com/people/cpp_yang
阳泉之火燎向太原,天元电器何以扶摇而上?阳泉,山西省辖地级市,市区人口约70万规模,一个典型的中国五线市场,却上演着鱼死网破的家电零售龙虎斗。阳泉一枝独秀早些年,阳泉家电市场被大连锁国美苏宁旗下各2家门店所割据,随后京东
洗衣机市场稳中再进,干衣机市场异军突起作为人类100个最伟大的发明之一,洗衣机从诞生伊始就因其将劳动妇女从繁重辛苦的洗衣家务中解放出来,而受到人们广泛的关注与喜爱,成为人们居家生活不可或缺的刚需产品。10月19日,由中
什么样的电视适合玩游戏?主要看这几点随着去年年底次时代主机的发售,电子游戏在全世界范围内又掀起了一次消费狂潮。与此同时,5G网络的商用化进程提速,也让过去数十年间停留在设想层面的云游戏概念逐渐成为现实。目前,已经有王
分享一个超奇葩的电脑黑屏故障案例分享一个超奇葩的电脑黑屏故障案例,前天有同事反映,离开电脑几分钟,电脑屏幕就会无故黑屏。按以往经验肯定是电脑的电源设置有问题,于是在同事的电脑上关掉了休眠过了一会儿,同事又反映,还
顺滑的码字感受杜伽K310银轴机械键盘使用体验大家好,我是南北桃源我办公室里的键盘是戴尔随电脑一起附带的薄膜键盘,由于每天码字的时间不短,导致一些常用的键位反应有些不太灵敏,于是我经常很使劲地去敲它,导致办公室的其他同事经常觉
Excel表中含有图片,复制到另外的表跟随新表格单元格改变大小Excel表中含有图片,复制到另外的表跟随新表格单元格改变大小。平时在工作中,有些表格里面含有大量的图片,每次复制到新的表格上,新表格上的图片就是变化很大,很难调整。今天告诉大家一
win10必备优化,告别卡顿,提升电脑运行极限相信大家都装微软的WIN10系统,WIN10带给我们好的体验,但同时有很功能是不必要,化化这些功能,可以有效提升我们电脑速率,维持最好的体验,让我们一起来手动试一试吧。效果不好不要
新买的笔记本,只有C盘怎么办新买的笔记本,只有C盘怎么办?,今天在这里推荐小伙伴们使用这两款无损分区工具,可以让你随意对电脑进行分区操作哦第一款是DiskGenius这DiskGenius是一款磁盘分区及数据
电脑开机显示黑屏,进不了系统解决办法电脑开机显示黑屏,进不了系统解决办法。平时我们开机的时候,会遇到电脑黑屏,出如以下提示出这个黑屏主要有以下这几个原因1硬盘分区时没有激活系统盘为主分区2硬盘连接问题,很可能是硬盘数
大兄弟这种环境还能睡着,不是一般人啊!啊哈哈内心慌得一批在面临两个同等价值的选择时,我相信对于任何一个人都是特别残忍的,因为对于自己来说那两样东西缺一不可,但碍于世界是公平的,所以只能挑选一样。那么在女朋友和一个亿的人民币当中让你做选择
华为低调发布新机,搭载中国芯7月27日晚,华为在线上低调发布了一款新机,Nova8SE活力版,采用一块6。6英寸的前置摄像头居中的挖孔屏LCD屏幕,分辨率为24001080,94的超高屏占比,外观呢是这样的。