简单工厂模式
简单工厂模式UML
简单工厂模式的实质是通过给工厂传入参数,动态的创建对应产品类对象(这些产品类继承自一个父类或接口)
#pragma once
#include <iostream>
#define SAFE_DELETE(ptr) if(ptr!=NULL) delete ptr
using namespace std;
class Product
{
public:
virtual void Operator() = NULL;
};
class ProductA : public Product
{
public:
virtual void Operator() {
cout << "产生产品A" << endl;
}
};
class ProductB : public Product
{
public:
virtual void Operator() {
cout << "产生产品B" << endl;
}
};
enum {
PRODUCTA,
PRODUCTB,
};
class Factory
{
public:
Factory() {
memset(this,0,sizeof(*this));
}
Product* createProduct(int param) {
switch (param)
{
case PRODUCTA:
product = new ProductA;
break;
case PRODUCTB:
product = new ProductB;
break;
default:
cout << "参数错误" << endl;
break;
}
if (NULL == product) {
cout << "产品创建失败,可能是内存不够了" << endl;
return NULL;
}
return product;
}
private:
Product* product;
};
int main() {
Factory a;
Product* b = a.createProduct(PRODUCTA);
if (b != NULL) {
b->Operator();
}
Product* c = a.createProduct(PRODUCTB);
if (c != NULL) {
c->Operator();
}
SAFE_DELETE(b);
SAFE_DELETE(c);
return 0;
}
优点
在简单工厂模式中,外部可以只通过参数来确定创建哪个具体类的对象,不用考虑这些对象究竟如何创建及如何组织的.明确了各自的职责和权利,有利于整个软件体系结构的优化
缺点
违背了开放—封闭原则及高内聚、低耦合的设计理念。如果把所有的创建逻辑都放在一个工厂内,那么如果要增加新的产品类,那么就要对这个工厂进行维护,如果判断逻辑比较复杂那对于整个程序和维护人员都将是灾难
|