亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

如何在C++中實現工廠模式

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

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

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

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

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

這些是實現了抽象產品類接口的具體類。在這個例子中,我們將創建兩個具體的形狀類:圓形和矩形。

#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)

工廠類負責創建抽象產品的實例。在這個例子中,我們將創建一個形狀工廠接口。

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

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

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. 使用工廠模式

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

#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;
}

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

0
商都县| 富阳市| 咸阳市| 金寨县| 湘阴县| 龙胜| 新龙县| 永安市| 宁安市| 肃宁县| 镇宁| 牡丹江市| 北海市| 和林格尔县| 延川县| 长春市| 津市市| 双桥区| 体育| 定襄县| 嘉祥县| 邵东县| 昂仁县| 白河县| 华亭县| 固原市| 普兰县| 宁南县| 新郑市| 治县。| 肇州县| 大足县| 土默特右旗| 保德县| 东安县| 武冈市| 元江| 海南省| 轮台县| 吉水县| 东乌|