抽象工厂模式概念

  • 提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类

抽象工厂模式实例

以组装电脑为例,一般来说,电脑组装都不可能是一家公司的零件,简单的来说,显卡就有NVIDIA和AMD两个牌子的厂商,电脑系统由windows和mac两种,所以可以用抽象工厂的思维来用计算机表达出来。

头文件

#include "stdafx.h"//显卡基类
class GraphicCard
{
public:virtual void cardType()=0; //显卡品牌
};//英伟达显卡
class NvidiaGraphicCard:public GraphicCard
{
public:void cardType(); //显卡品牌
};//AMD显卡
class AmdGraphicCard:public GraphicCard
{
public:void cardType(); //显卡品牌
};//计算机系统基类
class ComputerSystem
{
public:virtual void systemType() =0;
};//MAC计算机系统类
class MACComputerSystem:public ComputerSystem
{
public:void systemType();
};//WIN计算机系统类
class WINComputerSystem:public ComputerSystem
{
public:void systemType();
};//工厂基类
class Factory
{
public:virtual ComputerSystem * createComputerSystem() = 0; //创建计算机系统的类别virtual GraphicCard* createGraphicSystem() = 0; //创建显卡的类别
};//宏碁工厂
class AcerFactory:public Factory
{
public:ComputerSystem * createComputerSystem(); //创建计算机系统的类别GraphicCard* createGraphicSystem(); //创建显卡的类别
};//华硕工厂
class AsusFactory:public Factory
{
public:ComputerSystem * createComputerSystem(); //创建计算机系统的类别GraphicCard* createGraphicSystem(); //创建显卡的类别
};

实现文件:

// AbstractFactory.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include "AbstractFactory.h"using namespace std;//实现//实现显卡
void AmdGraphicCard::cardType()
{cout << "生产AMD显卡" << endl;
}void NvidiaGraphicCard::cardType()
{cout << "生产英伟达显卡" << endl;
}void WINComputerSystem::systemType()
{cout << "系统为WINDOWS系统" << endl;
}void MACComputerSystem::systemType()
{cout << "系统为MAC系统" << endl;
}ComputerSystem* AcerFactory::createComputerSystem()
{cout << "宏碁电脑工厂:"<<endl; return new MACComputerSystem(); //生产Mac系统
}ComputerSystem* AsusFactory::createComputerSystem()
{cout << "华硕电脑工厂:"<<endl; return new WINComputerSystem(); //生产WIN系统
}GraphicCard* AcerFactory::createGraphicSystem()
{cout << "宏碁电脑工厂:"<<endl; return new AmdGraphicCard(); //生产amd显卡
}GraphicCard* AsusFactory::createGraphicSystem()
{cout << "华硕电脑工厂:"<<endl; return new NvidiaGraphicCard(); //生产英伟达显卡
}int _tmain(int argc, _TCHAR* argv[])
{//调用Factory * cur_factory = new AcerFactory();ComputerSystem * cur_system= cur_factory->createComputerSystem();cur_system->systemType();GraphicCard * cur_gra = cur_factory->createGraphicSystem();cur_gra->cardType();return 0;
}

运行结果:

抽象工厂模式用处

抽象工厂可以用于描述现在全球化市场,就是一辆车的配件可以来自各个地方,而且每个地方生产的东西可能还都不相似。

比较麻烦的一点的,如果需要添加产品的话,需要增加很多类。

抽象工厂方法模式和工厂方法模式的区别

  • 工厂方法模式只有一个抽象产品类,而抽象工厂有多个

C++设计模式详解之抽象工厂模式解析相关推荐

  1. 设计模式详解:抽象工厂模式

    今天我们来看一下另一个使用频率非常高的抽象工厂模式,看完原理分别给出.NET和JAVA两种语言的实现源码. 定义: 抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类. ...

  2. C++设计模式详解之装饰者模式解析

    装饰者模式的概念 装饰者模式指的是动态的将责任附加到对象上,想要扩展其功能,装饰者提供有别于继承的另一种选择.(参考<Head First 设计模式>) 个人理解:装饰者就是一种类包类 就 ...

  3. C++设计模式详解之适配者模式解析

    C++ 适配器模式解析 适配器模式概念 将一个类的接口,转换成客户端期望的另一个接口.适配器让原先接口不兼容的类可以合作无间. 适配器实例 最简单的示例就是常规3.5mm耳机插入苹果7以上的手机,需要 ...

  4. 设计模式(6)——抽象工厂模式(Abstract Factory Pattern,创建型)

    1.概述 使用设计模式可以提高代码的可复用性.可扩充性和可维护性.抽象工厂模式(Abstract Factory Pattern)属于创建型模式,为创建一组相关或者相互依赖的对象(产品族)提供一个抽象 ...

  5. 【Java设计模式】简单学抽象工厂模式——你好,微信还是支付宝

    目录 说明 实现方式 自问自答 其他链接 说明 五大创建型模式之一,其他还有单例模式.原型模式.建造者模式.工厂模式. 抽象工厂模式(Abstract Factory Pattern):定义了一个in ...

  6. 《设计模式详解》创建型模式 - 工厂模式

    <设计模式详解> 4.2 工厂模式 4.2.1 概述 4.2.2 简单工厂模式 4.2.2.1 结构 4.2.2.2 实现 4.2.2.3 优缺点 4.2.2.4 扩展 - 静态工厂 4. ...

  7. 工厂模式详解(简单工厂模式,工厂方法模式,抽象工厂模式,只给出抽象工厂模式具体代码)

    1.简单工厂模式(Factory) 应用场景:又叫做静态工厂方法(StaticFactory Method)模式,但不属于 23 种设计模式之一.简单工厂模式的实质是由一个工厂类根据传入的参数,动态决 ...

  8. 《设计模式详解》结构型模式 - 代理模式

    代理模式 5.1 代理模式 5.1.1 概述 5.1.2 结构 5.1.3 静态代理 5.1.4 动态代理 JDK 动态代理 JDK 动态代理分析 CGLIB 动态代理 5.1.5 三种代理的对比 5 ...

  9. 《设计模式详解》创建型模式 - 建造者模式

    建造者模式 4.4 建造者模式 4.4.1 概述 4.4.2 结构 4.4.3 实例 4.4.4 优缺点 4.4.5 使用场景 4.4.6 扩展 - 构建对象 重构前 重构后 4.5 创建型模式对比 ...

最新文章

  1. 高精度加减法 1000阶乘求法
  2. python中memoryerror_解决python报错MemoryError
  3. java面向对象语言_Java到底是不是一种纯面向对象语言?
  4. 变量的三重属性_TypeScript基础入门 - 变量声明(三)
  5. 远程登录出现 身份验证错误 要求的函数不受支持
  6. 在matlab中进行遥感影像地理坐标的相互转换
  7. 安装 卸载 mysql linux,Linux 下MySQL 安装与卸载
  8. Atitit flowable使用总结 目录 1. flowable 1 1.1. 添加依赖 1 1.2. Flowable的启动接口 2 2. 还是使用简单流程来完成业务流程的学习, 2 2.1.
  9. 一篇文章教会你使用Python定时抓取微博评论
  10. 计算机毕业论文基于Python实现的仓库库存管理系统进销存储系统
  11. 树莓派遇见逻辑分析仪,看看树莓派PWM信号和UART信号!
  12. 【华人学者风采】林达华 香港中文大学
  13. 考研加油站系统的设计与实现
  14. 创建一个DAPP的全流程
  15. 环信客服SDK接入-----(一)
  16. 梯度下降【无约束最优化问题】
  17. 钢琴的乐理知识以及musicXml属性介绍
  18. Spring集成JMS入门
  19. 搜狗搜索X知乎:世界是这样检索的
  20. Python 练习题 身体素质指数

热门文章

  1. java 连接solrcloud_Solr 14 - SolrJ操作SolrCloud集群 (Solr的Java API)
  2. 无法对数据库'XXX' 执行删除,因为它正用于复制的解决方
  3. 【Oracle的存储过程之面向对象之特性】
  4. 2019.7.26数组
  5. JSON有关的一道题
  6. 第一单元总结(汇编初探)
  7. 单例设计模式 优缺点 及 使用场景
  8. bzoj 1398: 寻找主人 AC自动机+最小表示法
  9. [BZOJ1998][Hnoi2010]Fsk物品调度
  10. Javascript综合应用小案例