C++二十三种设计模式之抽象工厂模式

news/2025/1/11 2:07:59/

C++二十三种设计模式抽象工厂模式

  • 一、组成
  • 二、特点
  • 三、目的
  • 四、缺点
  • 五、示例代码

一、组成

抽象产品类:声明产品功能公共接口。
具体产品类:实现产品功能接口。
抽象工厂类:声明创建一组具体产品公共接口。
具体工厂类:实现创建一组具体产品接口。

二、特点

1、抽象工厂创建具体产品接口返回抽象产品类型。
2、一个具体工厂创建一组特定风格产品。

三、目的

无需指定具体类的情况下,为一组相互依赖的对象提供创建接口。

四、缺点

1、违反开闭原则,新增产品类需要改动原有的工厂类。
2、场景限制问题,通常用于创建一组相互依赖的对象,意味着不适合于高度灵活的场景。

五、示例代码

#include<iostream>
#include <vector>
#include <string>
#include <mutex>using namespace std;class Shape;//抽象产品类
class Rectangle;//具体产品类
class Circle;//具体产品类
class Color;//抽象产品类
class Red;//具体产品类
class Blue;//具体产品类
class AbstractFactory;//抽象工厂类
class ConcreteFactory;//具体工厂类
class ConcreteFactory2;//具体工厂类class Shape {
public:virtual ~Shape() {}virtual void draw() = 0;
};class Rectangle:public Shape {public:~Rectangle() {}void draw() {cout << "Drawing a Rectangle" << endl;}
};class Circle :public Shape {public:~Circle() {}void draw() {cout << "Drawing a Circle" << endl;}
};class Color {
public:virtual ~Color() {};virtual void fill() = 0;
};class Red : public Color{
public:~Red() {}void fill() {cout << "Filling with Red Color" << endl;}
};class Blue : public Color {
public:~Blue() {}void fill() {cout << "Filling with Blue Color" << endl;}
};class AbstractFactory {
public:virtual ~AbstractFactory() {};virtual unique_ptr<Shape> createShape() = 0;virtual unique_ptr<Color> createColor() = 0;
};class ConcreteFactory : public AbstractFactory {
public:~ConcreteFactory() {};unique_ptr<Shape> createShape() {return make_unique<Rectangle>();};unique_ptr<Color> createColor() {return make_unique<Red>();};
};class ConcreteFactory2 : public AbstractFactory {
public:~ConcreteFactory2() {};unique_ptr<Shape> createShape() {return make_unique<Circle>();};unique_ptr<Color> createColor() {return make_unique<Blue>();};
};int main() {AbstractFactory* factory = new ConcreteFactory();unique_ptr<Shape> shape = factory->createShape();unique_ptr<Color> color = factory->createColor();shape->draw();color->fill();AbstractFactory* factory2 = new ConcreteFactory();unique_ptr<Shape> shape2 = factory->createShape();unique_ptr<Color> color2 = factory->createColor();shape2->draw();color2->fill();
}

http://www.ppmy.cn/news/1562125.html

相关文章

Linux开发工具(补充)

Git git仓库本质上是一个目录&#xff0c;.gitignore文件里对应文件后缀不会被上传 下载指令 sudo yum install git 提交方法 下载项目到本地 创建好一个放置代码的目录. git clone [url] 这里的 url 就是刚刚建立好的项目的链接. 三板斧第一招: git add 将代码放到刚才下…

【python】项目结构下每个包的__init__.py 有什么作用

项目结构下每个包的__init__.py 有什么作用 主要作用&#xff1a;如何编写 __init__.py 文件项目结构中的 __init__.py 文件示例 在 Python 项目中&#xff0c;__init__.py 文件用于将一个目录标记为一个 Python 包。 主要作用&#xff1a; 包的初始化&#xff1a;__init__.py …

如何限制大量请求并发

前言&#xff1a; 1、主流浏览器在 HTTP/1.1 下对同一域名的最大并发请求数通常是 6~8 个。超过限制的请求会进入队列&#xff0c;等待空闲的连接。 2、可以利用Promise模拟任务队列&#xff0c;控制并发请求数量&#xff0c;以避免对服务器造成过大的压力。&#xff08;先进先…

Win11+WSL2+Ubuntu24.04安装Genesis并实现正常运行

什么是Genesis Genesis是一款由卡内基梅隆大学、马里兰大学、斯坦福大学、麻省理工学院等全球顶尖研究机构联合开发的开源生成式物理引擎。于2024年12月19日正式开源。它专为机器人、嵌入式 AI 和物理 AI 应用设计&#xff0c;能够模拟各种物理现象&#xff08;如刚体、液体、…

识日 1.2.8 | 完全免费的日语学习软件,小清新风格

识日是一款免费的日语学习软件&#xff0c;界面简洁美观&#xff0c;支持主题色设置。它提供了日语50音学习、单词查询、日语词典等功能&#xff0c;并有详细的发音和笔画展示。用户可以通过多种模式背单词&#xff0c;如快速模式、洗脑模式&#xff08;重复朗读单词&#xff0…

REVERSE-COMPETITION-CCSSSC-2025

REVERSE-COMPETITION-CCSSSC-2025 donntyouseeHappyLockkernel_traffic donntyousee elf64&#xff0c;ida反编译不太行&#xff0c;有花指令&#xff0c;直接调汇编 读输入 读输入前有条打印”plz input your flag”&#xff0c;肯定是在.init_array&#xff0c;确实有很多 …

vulhub-deathnote靶场实战

扫描靶机地址 访问网址访问不到&#xff0c;扫描端口 namp -sS -sV -T5 -A -p- 192.168.249.128 目录扫描&#xff1a; dirsearch -u 192.168.8.6 -i 200 gobuster gobuster dir -u http://192.168.8.6 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x …

AI赋能金融服务:效率与安全的新高度

引言 金融服务行业正经历着前所未有的变革。日益增长的客户需求、日趋复杂的金融产品以及日益严峻的监管环境&#xff0c;都对金融机构提出了更高的要求。它们面临着提升效率、有效管控安全风险以及优化用户体验等诸多挑战。传统的人工操作模式已难以满足快速发展的市场需求。…