【C++设计模式】抽象工厂模式
学习总结
(1)抽象工厂模式结构与工厂方法模式结构类似,不同之处在于,一个具体工厂可以生产多种同类相关的产品。
- 抽象工厂模式的优点:
- 工厂方法用于创建客户所需产品,同时向客户隐藏某个具体产品类将被实例化的细节,用户只需关心所需产品对应的工厂;
- 新加入产品系列时,无需修改原有系统,增强了系统的可扩展性,符合开闭原则。
- 抽象工厂模式的缺点:
- 在已有产品系列中添加新产品时需要修改抽象层代码,对原有系统改动较大,违背开闭原则
- 适用环境:
- 一系列/一族产品需要被同时使用时,适合使用抽象工厂模式;
- 产品结构稳定,设计完成之后不会向系统中新增或剔除某个产品
抽象工厂模式中,如果需要新增加一个系列的产品,比如足球系列,只需增加一族新的具体产品类(抽象和具体)并提供一个对应的工厂类即可。但是,如果要在已有的产品族里增加另一个产品,比如Jungle打篮球,除了需要篮球和篮球衣外,Jungle还想换双篮球鞋,这时候该怎么办呢?是不是要去修改BasketballFactory呢?
文章目录
- 学习总结
- 一、抽象工厂模式
- 1.1 抽象工厂模式结构
- 1.2 抽象工厂模式的栗子
- 二、AbstractFactory.h头文件
- 三、客户端代码
一、抽象工厂模式
抽象工厂模式,其抽象程度更高,每一个具体工厂可以生产一组相关的具体产品对象。
抽象工厂模式的定义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。
1.1 抽象工厂模式结构
抽象工厂模式结构与工厂方法模式结构类似,不同之处在于,一个具体工厂可以生产多种同类相关的产品:
- 抽象工厂(AbstractFactory):所有生产具体产品的工厂类的基类,提供工厂类的公共方法;
- 具体工厂(ConcreteFactory):生产具体的产品
- 抽象产品(AbstractProduct):所有产品的基类,提供产品类的公共方法
- 具体产品(ConcreteProduct):具体的产品类
结合抽象工厂模式定义和UML,可以看到具体工厂ConcreteFactory_A
可以生产两种产品,分别是ConcreteProduct_A_1
和ConcreteProduct_A_2
,另一个具体工厂ConcreteFactory_B
同理。客户端使用时,需要声明一个抽象工厂AbstractFactory
和两个抽象产品AbstractProduct
。
1.2 抽象工厂模式的栗子
篮球保管室可以提供篮球和篮球衣,足球保管室可以提供足球和足球衣。Jungle只要根据心情去某个保管室,就可以换上球衣、拿上球,然后就可以愉快地玩耍了。
对应的UML实例图:
二、AbstractFactory.h头文件
//抽象工厂类
class AbstractFactory
{public:virtual AbstractBall *getBall() = 0;virtual AbstractShirt *getShirt() = 0;
};
注意上面的抽象工厂类中定义两个纯虚函数。
//抽象产品类AbstractBall
class AbstractBall
{public:AbstractBall(){}//抽象方法:void play(){};
};//具体产品类Basketball
class Basketball :public AbstractBall
{public:Basketball(){play();}//具体实现方法void play(){printf("Jungle play Basketball\n\n");}
};//具体产品类Football
class Football :public AbstractBall
{public:Football(){play();}//具体实现方法void play(){printf("Jungle play Football\n\n");}
};//抽象产品类AbstractShirt
class AbstractShirt
{public:AbstractShirt(){}//抽象方法:void wearShirt(){};
};//具体产品类BasketballShirt
class BasketballShirt :public AbstractShirt
{public:BasketballShirt(){wearShirt();}//具体实现方法void wearShirt(){printf("Jungle wear Basketball Shirt\n\n");}
};//具体产品类FootballShirt
class FootballShirt :public AbstractShirt
{public:FootballShirt(){wearShirt();}//具体实现方法void wearShirt(){printf("Jungle wear Football Shirt\n\n");}
};//抽象工厂类
class AbstractFactory
{public:virtual AbstractBall *getBall() = 0;virtual AbstractShirt *getShirt() = 0;
};//具体工厂类BasketballFactory
class BasketballFactory :public AbstractFactory
{public:BasketballFactory(){printf("BasketballFactory\n");}AbstractBall *getBall(){printf("Jungle get basketball\n");return new Basketball();}AbstractShirt *getShirt(){printf("Jungle get basketball shirt\n");return new BasketballShirt();}
};//具体工厂类BasketballFactory
class FootballFactory :public AbstractFactory
{public:FootballFactory(){printf("FootballFactory\n");}AbstractBall *getBall(){printf("Jungle get football\n");return new Football();}AbstractShirt *getShirt(){printf("Jungle get football shirt\n");return new FootballShirt();}
};
三、客户端代码
#include <iostream>
#include "AbstractFactory.h"int main()
{printf("抽象工厂模式\n");//定义工厂类对象和产品类对象AbstractFactory *fac = NULL;AbstractBall *ball = NULL;AbstractShirt *shirt = NULL;fac = new BasketballFactory();ball = fac->getBall();shirt = fac->getShirt();fac = new FootballFactory();ball = fac->getBall();shirt = fac->getShirt();system("pause");return 0;
}
【C++设计模式】抽象工厂模式相关推荐
- 系统架构技能之设计模式-抽象工厂模式
一.上篇回顾 上篇我们主要讲述了简单工厂模式和工厂模式.并且分析了每种模式的应用场景和一些优缺点,我们现在来回顾一下: 简单工厂模式:一个工厂负责所有类型对象的创建,不支持无缝的新增新的类型对象的创建 ...
- 常见设计模式—抽象工厂模式
设计模式-抽象工厂模式 1.什么是抽象工厂模式 抽象工厂模式是围绕一个超级工厂创建其它工厂,是工厂方法模式的升级版本,工厂方法模式只生产一个等级的产品,而抽象工厂模式可生产多个等级的产品. 2.角色分 ...
- 【JAVA进阶系列】JAVA 设计模式 -- 抽象工厂模式(Abstract Factory)
[JAVA进阶系列]JAVA 设计模式 -- 抽象工厂模式(Abstract Factory) [1.1]抽象工厂模式简介 抽象工厂者模式的类结构图 AbstractProduct(抽象产品),Abs ...
- java设计模式---抽象工厂模式
工厂模式在项目中是常常用到的,有人说只有大项目才会用到,小项目是体会不出来.其实使用设计模式与项目的大小没有实质性的联系.设计模式是经验的总结而不是衡量项目大小的标准. 以开发项目的DAO层为例,在项 ...
- C++设计模式--抽象工厂模式
前言 前面有两篇文章分别介绍了简单工厂模式和工厂方法模式,这两种模式都比较常见,今天介绍工厂模式的最后一种,抽象工厂模式. 抽象工厂模式(Abstract Factory Pattern)是所有形态的 ...
- python工厂模式 理解_浅谈Python设计模式 - 抽象工厂模式
声明:本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 在上一篇我们对工厂模式中的普通工厂模式有了一定的了解,其实抽象工作就是 表示针对 ...
- 05设计模式——抽象工厂模式
前言:以下总结来自龙哥---左潇龙博客. 总结的很到位,附上博客链接:http://www.cnblogs.com/zuoxiaolong/p/pattern6.html 抽象工厂模式算是工厂相关模式 ...
- [设计模式] ------ 抽象工厂模式
抽象工厂模式 抽象工厂模式,就是对工厂方法模式加以改进而已,其实就是用简单工厂模式的套路创建各个工厂,后面和工厂模式就一模一样了. 其实就是相当于将创建哪个工厂的权利再次放给调用端. 调用端在调用的时 ...
- C++设计模式-抽象工厂模式
目录 基本概念 代码与实例 基本概念 抽象工厂模式(Abstract Factory),提供一个创建一系列相关或相互依赖对象的接口,从而无需指定他们具体的类. 抽象工厂的好处: 1. 易于交换产品系列 ...
- 深入理解设计模式-抽象工厂模式
文章目录 一.定义 二.使用场景 三.代码样例 1.需求 2.类图 3.实体类 4.产品类 5.工厂类 6.客户端 四.优缺点 结尾 一.定义 抽象工厂模式隶属于设计模式中的创建型模式,用于产品族的构 ...
最新文章
- AnkhSVN使用手册
- “四方定理”--蓝桥杯
- Integer与int的比较与区别
- 246. Strobogrammatic Number
- 简单新闻管理系统(jsp)
- ArcGIS批量计算图层中矢量要素面积——ArcMap
- bilibili老版本_bilibili旧版本
- 本周大新闻|传Cambria采用升级版XR2芯片,TGS增设VR虚拟展厅
- 自己搭建网站选用服务器的方法
- Android中如何利用Minui显示PNG格式的图片
- 1096:数字统计(信奥)
- 网站让浏览器崩溃的原因有哪些
- 易语言c语言哪个做游戏脚本,易语言游戏脚本写法源码
- 移动机器人控制软件的设计与实现
- python二级真题 d[i] = d.get(i,0)+1
- omniplan导出html,OmniPlan 3.14.4 最NB的项目管理流程软件
- wow盗号木马事件前后
- 奇虎360Java笔试题
- oracle延时盲注如何防止,【原创】WEB安全第四章SQL注入篇21 oracle 延时注入
- 哈哈哈,真香!妹子图终于可以多图预览了