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 << "宏碁电脑工厂:"<createComputerSystem();
  cur_system->systemType();
  GraphicCard * cur_gra = cur_factory->createGraphicSystem();
  cur_gra->cardType();
  return 0;
}

运行结果:

C++设计模式详解之抽象工厂模式解析_第1张图片

 

抽象工厂模式用处

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

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

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

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

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

你可能感兴趣的:(QT开发,c++,设计模式,抽象工厂模式,c语言,qt教程)