前言
这里简单介绍下简单工厂模式,并用该模式实现简单计算器功能。
简单工厂模式的理解
简单工厂模式,就是将创建不同对象的过程在一个专门的类中来实现,我们称这个类为工厂类,用户只需要传入对应的参数就可以获得相应的类的对象。
c++简单计算器实现
类图(引用《大话设计模式》简单工厂模式类图)如下图所示:
#include <iostream>
#include <memory>
class Operations
{
private:
double number1;
double number2;
public:
Operations() {}
Operations(double num1, double num2) : number1(num1), number2(num2) {}
void SetNumber1(double num1)
{
number1 = num1;
}
double GetNumber1()
{
return number1;
}
void SetNumber2(double num2)
{
number2 = num2;
}
double GetNumber2()
{
return number2;
}
virtual double GetResult() = 0;
virtual ~Operations() {}
};
class OperationsAdd : public Operations {
public:
virtual double GetResult()
{
return GetNumber1() + GetNumber2();
}
};
class OperationsSubstract : public Operations {
public:
virtual double GetResult()
{
return GetNumber1() - GetNumber2();
}
};
class OperationsMultiply : public Operations
{
public:
virtual double GetResult()
{
return GetNumber1() * GetNumber2();
}
};
class OperationsDivision : public Operations
{
public:
virtual double GetResult()
{
return (GetNumber2() == 0 ? DBL_MAX : (GetNumber1() / GetNumber2()));
}
};
class SimpleFactory {
public:
static std::shared_ptr<Operations> CreateOperations(const char operation)
{
std::shared_ptr<Operations> smartPtr = NULL;
switch (operation)
{
case '+':
smartPtr = std::make_shared<OperationsAdd>();
break;
case '-':
smartPtr = std::make_shared<OperationsSubstract>();
break;
case '*':
smartPtr = std::make_shared<OperationsMultiply>();
break;
case '/':
smartPtr = std::make_shared<OperationsDivision>();
default:
break;
}
return std::move(smartPtr);
}
};
int main()
{
std::shared_ptr<Operations> ptrOperation = SimpleFactory::CreateOperations('+');
ptrOperation->SetNumber1(10);
ptrOperation->SetNumber2(10);
std::cout << "10 + 10 = " << ptrOperation->GetResult() << std::endl;
system("pause");
return 0;
}
总结
其实,简单工厂模式很容易理解,但是个人应用的很少,因为需要添加很多switch … case代码来实现对象的创建,没新增一个类,就要新增一个case分支,个人认为这不是很优秀。
参考
《大话设计模式》