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();
}
相关推荐
光电笑映7 小时前
进程间通信:深入 System V IPC:共享内存、消息队列与信号量
linux·运维·服务器·c++
王_teacher7 小时前
23种设计模式之工厂模式
设计模式·软件工程·简单工厂模式·工厂方法模式·抽象工厂模式
a诠释淡然7 小时前
C++模板元编程—现代C++的黑魔法
开发语言·c++
汉克老师7 小时前
GESP2026年3月认证C++六级真题与解析(单选题1-8)
c++·多态··构造函数·循环队列·bst·gesp6级
charlie1145141917 小时前
现代C++工程:constexpr 基础:编译期求值的艺术
开发语言·c++
小欣加油7 小时前
leetcode121买卖股票的最佳时机
数据结构·c++·算法·leetcode·职场和发展
geovindu8 小时前
python:Coroutines Pattern
开发语言·python·设计模式·协程模式
牛油果子哥q8 小时前
【C++运算符重载】C++运算符重载终极精讲:单目/双目/关系/赋值运算符重载、成员与全局重载、重载禁区、底层原理与企业级工程规范
开发语言·c++
2601_961845158 小时前
2026四级作文预测题|英语四级写作押题+提纲PDF
java·c语言·数据库·c++·python·pdf·php
郝亚军8 小时前
Visual Studio 2022项目中的.sln是什么?
c++·c#·visual studio