您的位置:首页 > 编程语言 > C语言/C++

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

2015-04-21 15:36 603 查看

简单工厂模式

简单工厂模式又叫静态工厂方法,不属于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方法里面读取配置文件,然后通过反射实例化相应的产品。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: