推荐阅读设计模式 C++工厂方法模式
品牌知名度逐渐提高,不单单只生产一种产品,如果我们继续使用一个工厂对应一种产品,那么假如有三个品牌华为、小米、苹果。他们各自都要三种产品,分别为手机、耳机、笔记本电脑。则此时我们需要创建9个工厂才能实现,类多了代码的实现和维护起来也是非常麻烦的。此时我们就必须引入一种新的模式----抽象方法模式

此时需要引用两个概念
产品等级:同一产品不同产商
产品族:同一产商不同产品

定义思想:抽象工厂模式是工厂方法模式的泛化版,工厂方法模式是一种特殊的抽象工厂模式。在工厂方法模式中,每一个具体工厂只能生成一种具体产品,而在抽象工厂方法模式中,每一个具体工厂可以生成多个具体产品。在实际的软件开发中,抽象工厂模式使用频率较高

优点

  1. 增加新的具体工厂和产品族很方便,无须修改已有系统,符合“开闭原则”
  2. 抽象工厂模式可以实现高内聚,低耦合的设计目的

缺点

  1. 在添加新的产品等级结构时,需要修改所有的工厂角色,包括抽象工厂类,在所有具体工厂类中都需要添加新产品的函数,不能很好的支持“开闭原则”

使用场景

  1. 当需要创建产品家族,或者想让制造的相关产品集合起来
  2. 用户不关心对象的创建过程,将对象的创建和使用解耦合

在抽象工厂模式中,我们可以根据厂商不同来创建不同的工厂,每种工厂中都可以生产属于自己的产品


代码实现
先实现一个抽象类的手机

//抽象手机
class AbstractPhone
{public:virtual void ShowName() = 0;
};

然后所有厂商的手机都要重写抽象手机提供的函数

//华为手机
class HuaweiPhone : public AbstractPhone
{public:virtual void ShowName(){cout << "华为手机" << endl;}
};
//小米手机
class XiaomiPhone : public AbstractPhone
{public:virtual void ShowName(){cout << "小米手机" << endl;}
};
//苹果手机
class ApplePhone : public AbstractPhone
{public:virtual void ShowName(){cout << "苹果手机" << endl;}
};

依次类推,有多少个产品,就需要创建多少个抽象的产品,也对应这每个厂商都需要去重写对应的函数

//抽象耳机
class AbstractHeadset
{public:virtual void ShowName() = 0;
};//华为耳机
class HuaweiHeadset : public AbstractHeadset
{public:virtual void ShowName(){cout << "华为耳机" << endl;}
};//小米耳机
class XiaomiHeadset : public AbstractHeadset
{public:virtual void ShowName(){cout << "小米耳机" << endl;}
};//苹果耳机
class AppleHeadset : public AbstractHeadset
{public:virtual void ShowName(){cout << "小苹果耳机" << endl;}
};//抽象电脑
class AbstractComputer
{public:virtual void ShowName() = 0;
};//华为电脑
class HuaweiComputer : public AbstractComputer
{public:virtual void ShowName(){cout << "华为电脑" << endl;}
};//小米电脑
class XiaomiComputer : public AbstractComputer
{public:virtual void ShowName(){cout << "小米电脑" << endl;}
};//苹果电脑
class AppleComputer : public AbstractComputer
{public:virtual void ShowName(){cout << "苹果电脑" << endl;}
};

产品有了,此时需要创建一个抽象的工厂,指定具体工厂都要拥有哪些功能

//抽象工厂 针对产品族
class AbstrackFactory
{public:virtual AbstractPhone* CreatePhone() = 0;virtual AbstractHeadset* CreateHeadset() = 0;virtual AbstractComputer* CreateComputer() = 0;
}

对应的是每个产商都要有每个各自的工厂,并且具体工厂中都要重写抽象工厂的函数

//华为工厂
class HuaweiFactory : public AbstrackFactory
{public:virtual AbstractPhone* CreatePhone(){return new HuaweiPhone();}virtual AbstractHeadset* CreateHeadset(){return new HuaweiHeadset();}virtual AbstractComputer* CreateComputer(){return new HuaweiComputer();}
};//小米工厂
class XiaomiFactory : public AbstrackFactory
{public:virtual AbstractPhone* CreatePhone(){return new XiaomiPhone();}virtual AbstractHeadset* CreateHeadset(){return new XiaomiHeadset();}virtual AbstractComputer* CreateComputer(){return new XiaomiComputer();}
};//苹果工厂
class AppleFactory : public AbstrackFactory
{public:virtual AbstractPhone* CreatePhone(){return new ApplePhone();}virtual AbstractHeadset* CreateHeadset(){return new AppleHeadset();}virtual AbstractComputer* CreateComputer(){return new AppleComputer();}
};

测试:

void test()
{//创建一个工厂AbstrackFactory* factory = nullptr;//创建产品AbstractPhone* phone = nullptr;AbstractHeadset* headset = nullptr;AbstractComputer* computer = nullptr;//指定该工厂是华为工厂factory = new HuaweiFactory();//通过华为工厂创建的产品phone = factory->CreatePhone();headset = factory->CreateHeadset();computer = factory->CreateComputer();phone->ShowName();headset->ShowName();computer->ShowName();delete phone;delete headset;delete computer;delete factory;
}

设计模式 C++抽象工厂模式相关推荐

  1. 设计模式系列·抽象工厂模式

    前言 以小说的笔法写的设计模式系列文章,你绝对看得懂![首发于公众号:"聊聊代码"] 设计模式系列·王小二需求历险记(一) 设计模式系列·王小二需求历险记(二) 设计模式系列·封装 ...

  2. 设计模式三—抽象工厂模式

    设计模式三-抽象工厂模式 一.定义 抽象工厂模式是工厂方法模式的进一步抽象.如果产品簇中只有一种产品,则退化为工厂方法模式. 二.原理图 三.代码实例 * 苹果和土豆是园丁1的杰作 * 葡萄和西红柿是 ...

  3. 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)

    原文:乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern) [索引页] [源码下载] 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Facto ...

  4. 设计模式复习-抽象工厂模式

    设计模式复习-抽象工厂模式 有两种硬件,PC和Phone,有两种系统,Windows和Linux,现在假设PC和Phone上全都能安装这两个系统,并且将来硬件不会在变化,但是系统可能需要扩展,比如扩展 ...

  5. 设计模式之四(抽象工厂模式第三回合)

    原文:设计模式之四(抽象工厂模式第三回合) 前言 抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 抽象工厂模式最大的好处便是易于交换产品系列,由于具体工厂类,例如I ...

  6. python抽象工厂模式_Python设计模式之抽象工厂模式

    Python设计模式之抽象工厂模式 这篇文章主要为大家详细介绍了Python设计模式之抽象工厂模式,感兴趣的小伙伴们可以参考一下 python面向对象编程入门,我们需要不断学习进步 "&qu ...

  7. 设计模式-04抽象工厂模式

    设计模式-04抽象工厂模式 文章中涉及到的代码,请自行下载 https://gitee.com/pan_xiao_lei123/designmode.git 前面介绍的工厂方法模式中考虑的是一类产品的 ...

  8. C#设计模式(4)——抽象工厂模式

    C#设计模式(4)--抽象工厂模式 一.引言 在上一专题中介绍了工厂方法模式,工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码),而工厂方法 ...

  9. 设计模式之抽象工厂模式(Abstract Factory)摘录

    面向对象系统的分析和设计实际上追求的就是两点:高内聚(Cohesion)和低耦合(Coupling). 23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.Fa ...

  10. java 工厂模式的写法_Java23种设计模式之抽象工厂模式

    概述 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. ...

最新文章

  1. css基础 设置链接颜色
  2. 使用Modernizr 检测HTML5和CSS3浏览器支持功能
  3. Nor 与Nand Flash 区别
  4. linux下的连接文件——软连接和硬连接的区别
  5. 快速乘法(防止数过大相乘超出long long)
  6. 汇编语言数据类型以及数据定义详解
  7. 并发容器之CopyOnWriteArrayList
  8. 方程组的直接解法和迭代法 python_基于任务驱动的翻转课堂线上教学 ——以《解二元一次方程组复习课》为例...
  9. 对比两个文件内容差异VS Visual Studio Code
  10. HR人力资源系统软件价格?哪家HR人力管理系统好
  11. htcd816+android密码,HTC816怎么解锁?HTC Desire 816刷机解锁教程图解
  12. 全网最全的 Java 各类技术栈架构图汇总(建议收藏)
  13. zencart模板,外贸鞋子模板
  14. WPS word编辑图表数据的正确姿态
  15. portraiture2023智能磨皮修饰滤镜插件中文版
  16. 搭建微步蜜罐,启动通用OA系统仿真登陆蜜罐,使用awvs来去进行扫描通用OA系统仿真登陆蜜罐,nmap工具扫描搭建蜜罐的系统。
  17. autoware.auto安装教程
  18. 征信报告 加密文档_PDF文档如何加密?看完这个方法你就知道了
  19. 关于对数的有趣问题:lnx趋近于负无穷的速率与lnx趋近于正无穷的速率一样吗?对数的平方趋近于无穷的速率相当于x的几次方?
  20. poi excel版本问题

热门文章

  1. 信息技术与计算机文化达标卷,初中信息技术试卷
  2. 104.202.60.2/.index.php,web扫描
  3. 30岁从零学计算机,30岁从零学阅读方法来得及吗?
  4. linux系统下RocketMQ的集群搭建
  5. 基于JAVA+SpringMVC+MYSQL的医院分诊挂号管理系统
  6. 基于JAVA+SpringBoot+Mybatis+MYSQL的实验室预约信息管理系统
  7. linux swap 分区调控(swap分区 lvm管理)
  8. JavaScript--动态添加元素
  9. UVA - 207 PGA Tour Prize Money
  10. 关于SpringMVC中text/plain的编码导致的乱码问题解决方法