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


简单工厂模式

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

代码实现:

#include 

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方法里面读取配置文件,然后通过反射实例化相应的产品。

你可能感兴趣的:(设计模式)