工厂方法模式介绍
工厂方法模式是一种创建型设计模式,该模式提供了一个创建对象的接口,但具体创建哪个对象则由子类决定。工厂方法模式可以将对象的创建和使用分离开来,从而更加灵活地管理对象的创建过程。
其应用场景通常是在需要创建复杂对象的情况下,例如游戏中创建不同种类的怪物、人物等。通过将对象的创建交给子类来完成,可以更好地扩展系统,减少耦合性并提高代码复用性。
工厂方法模式的实现通常包括一个抽象工厂类和多个具体工厂子类。抽象工厂类定义了一个创建对象的接口,具体工厂子类则实现了该接口来创建具体的对象。
代码示例
#include <memory>
#include <iostream>
// Virtual Product
class Shape {
public:
virtual void draw() = 0;
};
// Actual Product Circle
class Circle : public Shape {
public:
void draw() override {
std::cout << "Circle::draw()" << std::endl;
}
};
// Actual Product Square
class Square : public Shape {
public:
void draw() override {
std::cout << "Square::draw()" << std::endl;
}
};
// Virtual Factory
class Factory{
public:
virtual std::unique_ptr<Shape> createShape() = 0;
};
// Actual Factory Circle
class CircleFactory : public Factory {
public:
std::unique_ptr<Shape> createShape() override {
return std::make_unique<Circle>();
}
};
// Actual Facotry Square
class SquareFactory : public Factory {
public:
std::unique_ptr<Shape> createShape() override {
return std::make_unique<Square>();
}
};
int main(int argc, char* argv[]) {
Factory* circleFactory = new CircleFactory();
Factory* squareFactory = new SquareFactory();
auto circle = circleFactory->createShape();
auto square = squareFactory->createShape();
circle->draw();
square->draw();
}