创建型模式之抽象工厂模式

一、概述

1、抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

2、抽象工厂模式:一个工厂可以生产一系列产品(一族产品),极大减少了工厂类的数量

3、抽象工厂模式:是所有形式工厂模式中最为抽象和最具有一般性的一种形式

4、抽象工厂模式:中的具体工厂不只是创建一种产品,它负责创建一族产品

二、抽象工厂模式的结构

抽象工厂模式包含以下4个角色

(1)AbstractFactory(抽象工厂)

(2)ConcreteFactoruy(具体工厂)

(3)AbstractProduct(抽象产品)

(4)ConcreteProduct(具体产品)

三、模式优点

1、隔离了具体类的生成,使得客户端不需要知道什么被创建

2、当一个产品族中的多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品族中的对象

3、增加新的产品族很方便,无须修改已有系统,符合开闭原则

四、模式缺点

1、增加新的产品等级结构麻烦,需要对原有系统进行较大的修改,甚至需要修改抽象层代码,这显然会带来较大的不便,违背了开闭原则

五、产品等级结构与产品族

1、产品等级结构:产品等级结构即产品的继承结构

2、产品族:产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品

六、工厂方法和抽象工厂的区别

1、工厂方法模式

(1)每个具体工厂只有一个或者一组重载工厂方法,只能生产一种产品,可能会导致系统中存在大量的工厂类,势必会增加系统的开销·

(2)一个抽象产品类,一个抽象工厂类

2、抽象工厂模式

(1)一个工厂可以生产一系列产品(一族产品),极大减少了工厂类的数量

(2)多个抽象产品类,一个抽象工厂类

七、抽象工厂模式示例代码

#include <iostream>
using namespace std;class RAM
{
public:virtual void show() = 0;
};
class CPU
{
public:virtual void show() = 0;
};class PcRAM : public RAM
{
public:virtual void show(){cout << "Pc的RAM在工作中" << endl;}
};class PcCPU : public CPU
{
public:virtual void show(){cout << "Pc的CPU在工作中" << endl;}
};class MacRAM : public RAM
{
public:virtual void show(){cout << "Mac的RAM在工作中" << endl;}
};
class MacCPU : public CPU
{
public:virtual void show(){cout << "Mac的CPU在工作中" << endl;}
};class AbstractFactory
{
public:virtual RAM* createRAM() = 0;virtual CPU* createCPU() = 0;
};class PcFactory : public AbstractFactory
{
public:virtual RAM* createRAM(){return new PcRAM;}virtual CPU* createCPU(){return new PcCPU;}
};class MacFactory : public AbstractFactory
{
public:virtual RAM* createRAM(){return new MacRAM;}virtual CPU* createCPU(){return new MacCPU;}
};int main()
{int id;cout << "---请输入要选择的平台---" << endl;cout << "---------1、Pc------------" << endl;cout << "---------2、Mac-----------" << endl;AbstractFactory* factory = nullptr;CPU* cpu = nullptr;RAM* ram = nullptr;cin >> id;if (id == 1){factory = new PcFactory;cpu = factory->createCPU();ram = factory->createRAM();}else if (id == 2){factory = new MacFactory;cpu = factory->createCPU();ram = factory->createRAM();}cpu->show();ram->show();delete factory;delete cpu;delete ram;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/285539.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

transformer 位置编码

目录 pytorch 实现位置编码 通俗易懂的&#xff1a; 从上面效果图可以看出&#xff0c;这个三角函数式位置编码满足以下四个特点&#xff1a; transformer 位置编码 transformer 位置编码通俗解释 绝对位置和相对位置 pytorch 实现位置编码 转自&#xff1a;https://www…

分类预测 | Matlab实现AOA-SVM算术优化支持向量机的数据分类预测【23年新算法】

分类预测 | Matlab实现AOA-SVM算术优化支持向量机的数据分类预测【23年新算法】 目录 分类预测 | Matlab实现AOA-SVM算术优化支持向量机的数据分类预测【23年新算法】分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现AOA-SVM算术优化支持向量机的数据分类预测…

坦克大战(二)

欢迎来到程序小院 坦克大战&#xff08;二&#xff09; 玩法&#xff1a;键盘&#xff08;A W S D&#xff09;键来控制方向,空格键发射子弹&#xff0c;N&#xff1a;下一关&#xff0c;P&#xff1a;上一关&#xff0c;Enter&#xff1a;开始&#xff0c;赶紧去闯关吧^^。开…

主馆位置即将售罄“2024北京国际信息通信展会”众多知名企聚京城

2024北京国际信息通信展&#xff0c;将于2024年9月份在北京国家会议中心盛大召开。作为全球信息通信技术领域的重要盛会&#xff0c;此次展会将汇集业内顶尖企业&#xff0c;展示最新的技术成果和产品。 目前&#xff0c;主馆位置即将售罄&#xff0c;华为、浪潮、中国移动、通…

使用小程序实现App灰度测试的好处

灰度测试&#xff08;Gray Testing&#xff09;是一种软件测试策略&#xff0c;也被称为渐进性测试或部分上线测试。在灰度测试中&#xff0c;新的软件版本或功能并非一次性推送给所有用户&#xff0c;而是仅在一小部分用户中进行测试。这可以帮助开发团队逐步暴露新功能或版本…

react-native利用百度地图SDK实现管道的采集

一、效果图 二、具体实现步骤 1、安装react-native-baidu-map npm install react-native-baidu-map 2、查看百度地图sdk的文档 通过参数配置&#xff0c;可选择定位模式、可设定返回经纬度坐标类型、可设定是单次定位还是连续定位 主要配置 option.setLocationMode(Location…

隐私计算介绍

这里只对隐私计算做一些概念性的浅显介绍&#xff0c;作为入门了解即可 目录 隐私计算概述隐私计算概念隐私计算背景国外各个国家和地区纷纷出台了围绕数据使用和保护的公共政策国内近年来也出台了数据安全、隐私和使用相关的政策法规 隐私计算技术发展 隐私计算技术安全多方计…

Web前端-CSS(文本样式)

文章目录 1.font字体1.1 font-size:大小1.2 font-family:字体1.3 font-weight:字体粗细1.4 font-style:字体风格1.5 font总结 2. css外观属性2.1 color:文本颜色2.2 text-align:文本水平对齐方式2.3 line-height:行间距2.4 text-indent:首行缩进2.5 text-decoration 文本的装饰…

协同物联:设备物联与车间数据采集的融合

随着工业4.0和智能制造的快速发展&#xff0c;物联网技术在工业领域的应用逐渐普及。其中&#xff0c;协同物联、设备物联和车间数据采集技术对于提升企业生产效率和降低运营成本具有重要意义。本文将深入探讨这些技术在现代工业环境中的应用及它们如何共同推动企业向数字化转型…

c语言:输出26个英文字母|练习题

一、题目 分两排&#xff0c;输出26个英文字母 如图&#xff1a; 二、思路分析 1、从第13个字母分行显示 2、从A开始&#xff0c;在A的ASC码后面&#xff0c;按顺序加1~26 三、代码图片【带注释】 四、源代码【带注释】 #include <stdio.h> //题目:输入26个字母&#x…

DBeaver Ultimate for Mac/win:掌握数据库的终极利器,助您高效管理数据!

在当今数字化时代&#xff0c;数据管理变得越来越重要。而作为一款功能强大的数据库管理工具&#xff0c;DBeaver Ultimate&#xff08;简称DBU&#xff09;助您轻松应对各种复杂的数据管理任务。无论您是数据库管理员、开发人员还是数据分析师&#xff0c;DBU都能为您提供全面…

穿越时光的Java之旅

穿越时光的Java之旅 《穿越时光的Java之旅》摘要引言1. 从大一开始的编程启蒙1.1 编程的初衷1.2 学习Java的初体验1.3 遇到的挑战与解决之道2. 大二&#xff1a;探索专业分流与技术方向选择2.1 专业选择的思考2.2 技术领域的广度与深度2.3 找到感兴趣的方向2.4 实践与项目经验3…