C++二十三种设计模式之工厂方法模式

C++二十三种设计模式之工厂方法模式

一、组成

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

二、特点

1、抽象工厂创建具体产品接口返回抽象产品类型。

2、一个具体工厂创建一个特定风格产品。

三、目的

无需指定具体类的情况下,创建一个特定风格的产品。

四、缺点

1、类膨胀问题,每增加一个产品类,需要对应增加一个工厂类。

五、示例代码

javascript 复制代码
#include<iostream>
#include <vector>
#include <string>
#include <mutex>

using namespace std;

class Shape;//抽象产品类
class Rectangle;//具体产品类
class Circle;//具体产品类
class AbstractFactory;//抽象工厂类
class RectangleFactory;//具体工厂类
class CircleFactory;//具体工厂类

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 AbstractFactory {
public:
	virtual ~AbstractFactory() {};
	virtual unique_ptr<Shape> createShape() = 0;
};

class RectangleFactory : public AbstractFactory {
public:
	~RectangleFactory() {};
	unique_ptr<Shape> createShape() {
		return make_unique<Rectangle>();
	};
};

class CircleFactory : public AbstractFactory {
public:
	~CircleFactory() {};
	unique_ptr<Shape> createShape() {
		return make_unique<Circle>();
	};
};

int main() {
	AbstractFactory* factoryRectangle = new RectangleFactory();
	unique_ptr<Shape> rectangle = factoryRectangle->createShape();
	rectangle->draw();

	AbstractFactory* factoryCircle = new CircleFactory();
	unique_ptr<Shape> circle = factoryCircle->createShape();
	circle->draw();
}
相关推荐
森G2 小时前
29、QStringListModel 和 QListView---------Model/View模型视图
c++·qt
ALex_zry8 小时前
C++网络编程心跳机制与连接保活:长连接稳定性保障
开发语言·网络·c++
学嵌入式的小杨同学9 小时前
STM32 进阶封神之路(三十二):SPI 通信深度实战 —— 硬件 SPI 驱动 W25Q64 闪存(底层时序 + 寄存器配置 + 读写封装)
c++·stm32·单片机·嵌入式硬件·mcu·架构·硬件架构
好大哥呀10 小时前
C++ Web 编程
开发语言·前端·c++
Mr_Xuhhh10 小时前
LeetCode hot 100(C++版本)(上)
c++·leetcode·哈希算法
漫随流水10 小时前
c++编程:反转字符串(leetcode344)
数据结构·c++·算法
tobias.b11 小时前
软件设计模式:核心术语·名词解释·关联对比
设计模式
南境十里·墨染春水11 小时前
C++ 笔记 友元(面向对象)
开发语言·c++·笔记
C++ 老炮儿的技术栈11 小时前
分享一个安全的CString
c语言·c++·windows·git·安全·visual studio
桦012 小时前
[C++复习]:STL
开发语言·c++