从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种
GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。
具体概念可以参照百度百科:
http://baike.baidu.com/view/1227908.htm
我们用一个简单的计算器(我们假设有+ - * \功能)例子来说明此模式:
Operation.cpp
class Operation{
public:
Operation(){numberA = 0; numberB = 0;}
void setNumberA(double var){numberA = var;}
void setNumberB(double var){numberB = var;}
double getNumberA(){return numberA;}
double getNumberB(){return numberB;}
virtual const double getResult() = 0;
protected:
double numberA, numberB;
};
class Add : public Operation{
public:
virtual const double getResult()
{
return numberA + numberB;
}
};
class Sub : public Operation{
public:
virtual const double getResult()
{
return numberA - numberB;
}
};
class Mul : public Operation{
public:
virtual const double getResult()
{
return numberA * numberB;
}
};
class Div : public Operation{
public:
virtual const double getResult()
{
if (numberB != 0) return numberA / numberB;
else return 0;
}
};
class OperationFactory{
public:
static Operation* createOperate(const char& operate)
{
Operation* op = 0;
switch(operate)
{
case '+':
op = new Add();
break;
case '-':
op = new Sub();
break;
case '*':
op = new Mul();
break;
case '/':
op = new Div();
break;
}
return op;
}
};
main.cpp
#include "operation.cpp"
#include "iostream"
using namespace std;
int main()
{
Operation *op;
op = OperationFactory::createOperate('+');//实现加法
op->setNumberA(10);
op->setNumberB(5);
double result = op->getResult();
cout <<result <<endl;
return 0;
}