一、简单工厂的定义
简单工厂模式属于创建型模式又叫做静态工厂方法模式,它属于类创建型模式。简单工厂模式专门定义一个根据参数来返回不同类的实例的函数,来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
二、简单工厂的优缺点
- 优点 工厂类承担了客户端创建对象的责任,用户只需提供相应的参数就能创建自己所需要的产品,不需要知道具体细节。可以在不修改客户端代码的情况下,修改和增加新的具体产品类。
- 缺点 不符合开闭原则,一旦增加新的类,则需要修改单工厂类中的逻辑。系统的所有逻辑都在工厂类中,一旦工厂类出现问题,则整个系统都将无法工作。
三、简单工厂的实现
下面提供一个用简单工厂实现的计算器,其中提供一个工厂类 —— 简单工厂类,用于实例化对象;抽象类 —— 计算类,用于实现多态;以及他的派生类 —— 加、减、乘、除类,用于实现具体的逻辑。
class Calculation
{
public:
virtual double GetResult()=0;
double numberA;
double numberB;
};
class Add :public Calculation
{
virtual double GetResult()
{
return numberA + numberB;
}
};
class Sub:public Calculation
{
virtual double GetResult()
{
return numberA - numberB;
}
};
class Mult:public Calculation
{
virtual double GetResult()
{
return numberA * numberB;
}
};
class Div:public Calculation
{
virtual double GetResult()
{
if (numberB==0)
{
throw new exception("除数不能为0");
}
return numberA / numberB;
}
};
class Factory
{
public:
static Calculation* createCalculation(char str)
{
Calculation* calc = nullptr;
switch (str)
{
case '+':
calc = new Add();
break;
case '-':
calc = new Sub();
break;
case '*':
calc = new Mult();
break;
case '/':
calc = new Div();
break;
default:
cout << "请输入正确的运算符" << endl;
break;
}
return calc;
}
};
Calculation* cal = Factory::createCalculation('/');
cal->numberA = 20;
cal->numberB = 10;
double result=0;
try
{
result = cal->GetResult();
}
catch (exception* e)
{
cout<<e->what()<<endl;
}
cout << result;
return 0;