C++设计模式-工厂模式
工厂方法模式(Factory Method Pattern)是创建型设计模式的一种,它通过定义一个创建对象的接口,但由子类决定实例化哪一个类,使得工厂方法模式的使用者不需要知道具体类的实例化过程。
这种模式的关键在于“工厂方法”是定义在抽象类中,并由具体的子类来实现的。通过工厂方法,客户端代码不需要直接通过 new
关键字来实例化对象,而是通过工厂来获取对象。
工厂方法模式的结构
- Product:定义工厂方法所创建的产品对象的接口。
- ConcreteProduct:实现
Product
接口的具体类,代表具体的产品。 - Creator(工厂类):声明一个工厂方法,返回一个
Product
类型的对象。 - ConcreteCreator(具体工厂类):实现工厂方法,返回具体的
Product
对象。
例子:图形绘制工厂
假设我们要开发一个图形绘制程序,用户可以选择绘制不同形状的图形。我们使用工厂方法模式来创建不同的形状。
1. 定义产品接口(抽象类)
#include <iostream>
#include <memory>
// 抽象产品类:Shape
class Shape {
public:
virtual void draw() = 0; // 纯虚函数:绘制图形
virtual ~Shape() {
}
};
2. 具体产品类(不同类型的图形)
// 具体产品类:Circle(圆形)
class Circle : public Shape {
public:
void draw() override {
std::cout << "Drawing a Circle" << std