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();
}
相关推荐
basketball61617 小时前
C++ 嵌套类完全指南:类中类的巧妙设计
开发语言·c++
nnsix17 小时前
设计模式 - 建造者模式 笔记
笔记·设计模式·建造者模式
kyle~17 小时前
ros_gz_bridge---底层通信的实现
c++·机器人·仿真·ros2
Jasmine_llq17 小时前
《B4261 [GESP202503 三级] 2025》
开发语言·c++·算法·条件判断算法·位运算恒等式推导·简单算术运算
小张成长计划..17 小时前
【C++】32:智能指针
c++
cui178756818 小时前
矩阵拼团 + 复购拼团:新零售最稳的复购模式,规则简单
大数据·人工智能·设计模式·零售
咩咦18 小时前
C++学习笔记19:运算符重载基础与赋值运算符重载
c++·学习笔记·类和对象·运算符重载·赋值运算符·operator
百珏18 小时前
[灰度发布]:全链路透传组件:APM、自研方案与 Java Agent 的实现取舍
后端·设计模式·架构
无限进步_19 小时前
C++异常机制:抛出、捕获与栈展开
开发语言·c++·安全
王老师青少年编程19 小时前
csp信奥赛C++高频考点专项训练之前缀和&差分 --【一维前缀和】:宝石串
c++·前缀和·csp·高频考点·信奥赛·宝石串