C++设计模式详解之抽象工厂模式解析

抽象工厂模式概念

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

抽象工厂模式实例

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

头文件

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

#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;
}

运行结果:

 

抽象工厂模式用处

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

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

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

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

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值