工厂模式

简单工厂模式

把创建封装进一个类里,当实现变化时,我们只需要修改这一个地方。

类图如下
image

工厂方法处理对象的创建,并将对象的创建封装在子类中,使得客户代码从子类对象的创建代码解耦。

代码示例如下

#include <iostream>

using namespace std;

class Product
{
public:
    Product()
    {
    }
    virtual ~Product() 
    {
    }
    virtual int Operate(int x,int y)
    {
        throw runtime_error("error");
    }
};

class ProductA final : public Product // + 
{
public:
    ProductA() : Product() {}
    virtual ~ProductA() {}
    int Operate(int x,int y) override
    {
        return x + y;
    }
};

class ProductB : public Product // *
{
public:
    ProductB() : Product() {}
    virtual ~ProductB() {}
    int Operate(int x,int y) override
    {
        return x * y;
    }
};

enum ProductType { PRODUCT_A, PRODUCT_B };

class Factory
{
public:
    virtual ~Factory() {}
    Product* create_product(ProductType type)
    {
        if (type == PRODUCT_A)
        {
            cout << "create product A" << endl;
            return new ProductA();
        }
        else if (type == PRODUCT_B)
        {
            cout << "create product B" << endl;
            return new ProductB();
        }
        else
        {
            throw runtime_error("error type");
        }
    }
};


int main()
{
    cout << "test" << endl;
    Factory factory;
    Product* op1 = factory.create_product(PRODUCT_A);
    cout << op1->Operate(3, 2) << endl;
    Product* op2 = factory.create_product(PRODUCT_B);
    cout << op2->Operate(3, 2) << endl;
    //factory.create_product(PRODUCT_C);
    return 0;
}

抽象工厂模式

抽象工厂为产品家族提供一个接口。

抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

类图如下:
image

工厂模式和抽象工厂模式的区别

  • 工厂模式适用于创建单一类型的对象,而抽象工厂模式适用于创建多个相互关联的对象。
  • 工厂模式是一对一的,抽象工厂模式是多对多的。

抽象工厂的优点:
组织一批相关的产品,有多个工厂。
缺点:
添加产品的时候,需要改变接口,进入类的内部修改类。

工厂方法的优点:
将客户代码从要实例化的具体类中解耦,不需要知道要创建哪些具体类(接口是同一个,参数不一样)

posted @   227569hy  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示