C++工厂方法模式

/**
    《工厂方法》
    工厂方法模式是一种创建型设计模式, 其在父类中提供一个创建对象的方法, 允许子类决定实例化对象的类型。

    工厂方法模式建议使用特殊的工厂方法代替对于对象构造函数的直接调用 (即使用 new运算符)。
    对象仍将通过 new运算符创建, 只是该运算符改在工厂方法中调用罢了。 工厂方法返回的对象通常被称作 “产品”。
 */

#include <iostream>
#include <string>

// 产品接口
class Product
{
public:
    virtual ~Product() {}
    virtual std::string Operation() = 0;
};

// 具体的产品
class ConcreteProduct1 : public Product
{
public:
    std::string Operation() override
    {
        return "result of the concrete product 1.";
    }
};

class ConcreteProduct2 : public Product
{
public:
    std::string Operation() override
    {
        return "result of the concrete product 2.";
    }
};

// 创建者接口
class Creator
{
public:
    virtual ~Creator() {}
    
    // 返回产品对象的工厂方法
    virtual Product *FactoryMethod() const = 0;

    std::string SomeOperation() const
    {
        // 调用工厂方法,创建一个产品对象
        Product *product = this->FactoryMethod();

        // 使用产品对象
        std::string result = "create a product with : " + product->Operation();
        
        // 删除对象
        delete product;
        
        return result;
    }
};

// 具体的创建者,会重写工厂方法
class ConcreteCreator1 : public Creator
{
public:
    Product* FactoryMethod() const override
    {
        // 创建对象
        return new ConcreteProduct1();
    }
};

class ConcreteCreator2 : public Creator
{
public:
    Product* FactoryMethod() const override
    {
        return new ConcreteProduct2();
    }
};

int main()
{
    Creator *creator1 = new ConcreteCreator1();
    std::cout << creator1->SomeOperation() << std::endl;

    Creator *creator2 = new ConcreteCreator2();
    std::cout << creator2->SomeOperation() << std::endl;
}

版权声明:本文为NINE_world原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。