溫馨提示×

如何在C++中實現(xiàn)工廠模式

c++
小樊
81
2024-08-29 18:45:08
欄目: 編程語言

在C++中實現(xiàn)工廠模式通常涉及到一個抽象產(chǎn)品類(Product),一個或多個具體產(chǎn)品類(Concrete Product),以及一個抽象工廠類(Factory)和/或一個或多個具體工廠類(Concrete Factory)。下面是一個簡單的示例:

  1. 定義抽象產(chǎn)品類(Product)

這是我們要創(chuàng)建的對象的接口。在這個例子中,我們將創(chuàng)建一個簡單的形狀接口。

class Shape {
public:
    virtual ~Shape() = default;
    virtual void draw() const = 0;
};
  1. 定義具體產(chǎn)品類(Concrete Product)

這些是實現(xiàn)了抽象產(chǎn)品類接口的具體類。在這個例子中,我們將創(chuàng)建兩個具體的形狀類:圓形和矩形。

#include<iostream>

class Circle : public Shape {
public:
    void draw() const override {
        std::cout << "Drawing a circle"<< std::endl;
    }
};

class Rectangle : public Shape {
public:
    void draw() const override {
        std::cout << "Drawing a rectangle"<< std::endl;
    }
};
  1. 定義抽象工廠類(Factory)

工廠類負(fù)責(zé)創(chuàng)建抽象產(chǎn)品的實例。在這個例子中,我們將創(chuàng)建一個形狀工廠接口。

class ShapeFactory {
public:
    virtual ~ShapeFactory() = default;
    virtual std::unique_ptr<Shape> createShape() const = 0;
};
  1. 定義具體工廠類(Concrete Factory)

這些是實現(xiàn)了抽象工廠類接口的具體類。在這個例子中,我們將創(chuàng)建兩個具體的形狀工廠類:圓形工廠和矩形工廠。

class CircleFactory : public ShapeFactory {
public:
    std::unique_ptr<Shape> createShape() const override {
        return std::make_unique<Circle>();
    }
};

class RectangleFactory : public ShapeFactory {
public:
    std::unique_ptr<Shape> createShape() const override {
        return std::make_unique<Rectangle>();
    }
};
  1. 使用工廠模式

現(xiàn)在我們可以使用這些工廠來創(chuàng)建形狀對象,而不需要直接實例化它們。

#include<memory>

int main() {
    std::unique_ptr<ShapeFactory> factory = std::make_unique<CircleFactory>();
    std::unique_ptr<Shape> shape = factory->createShape();
    shape->draw();

    factory = std::make_unique<RectangleFactory>();
    shape = factory->createShape();
    shape->draw();

    return 0;
}

在這個例子中,我們首先創(chuàng)建了一個圓形工廠,然后使用它來創(chuàng)建一個圓形對象并調(diào)用其draw方法。然后我們改變了工廠,創(chuàng)建了一個矩形工廠,并用它來創(chuàng)建一個矩形對象并調(diào)用其draw方法。這樣,我們就可以在運行時動態(tài)地改變要創(chuàng)建的對象的類型,而不需要修改客戶端代碼。

0