设计模式 - 简单工厂模式/静态工厂模式(Static Factory Method) C++实现

本文介绍简单工厂模式的概念及其应用场景,通过C++代码示例详细解释了如何使用简单工厂模式来统一管理常用对象的创建过程,并探讨了该模式的局限性和改进方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


简单工厂模式

简单工厂模式又叫静态工厂方法,不属于23种GOF模式之一。
适用场景:在程序的各个地方都需要new一些常用的对象,并且对new的对象要进行一些初始化,new操作散落在程序的各个地方,不便于管理和维护,因此引入简单工厂模式来统一管理常见对象的创建。
客户调用工厂的方法,得到需要的产品,无需自己创建产品。
工厂根据客户传入的参数或者配置文件来决定创建什么类型的产品。


代码实现:

#include <iostream>

using namespace std;

typedef enum ProductType {
    TypeA,
    TypeB
} PRODUCTTYPE;

class AbsProduct {
public :
    virtual void draw() = 0;
};

class ProductA : public AbsProduct{
public :
    virtual void draw() {
        cout << "ProductA" << endl;
    }
};

class ProductB : public AbsProduct{
public :
    virtual void draw() {
        cout << "ProductB" << endl;
    }
};

class SimpleFatory {
public :
    static AbsProduct * getProduct(PRODUCTTYPE type) {
        AbsProduct * product = NULL;
        if(type == TypeA) {
            product = new ProductA();
            // do some thing
        } else if(type == TypeB) {
            product = new ProductB();
            // do some thing
        }
        return product;
    }
};

int main() {
    AbsProduct * product1 = SimpleFatory::getProduct(TypeA);
    AbsProduct * product2 = SimpleFatory::getProduct(TypeB);

    if(product1 != NULL)
        product1->draw();
    if(product2 != NULL)
        product2->draw();

    delete product1;
    product1 = NULL;
    delete product2;
    product2 = NULL;

    return 0;
}



很明显,这个代码不符合开闭原则,当要增加一个产品时,不得不修改工厂里面的方法。
为了符合开闭原则,如果是Java语言,可以采用配置文件的方法,在getProduct方法里面读取配置文件,然后通过反射实例化相应的产品。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值