简单工厂模式
利用简单工厂模式,实现两个数的运算,返回运算结果。
1. uml类图

2. C++程序实现
#include <iostream>
#include <memory>
#include <string>
class Calculator
{
public:
double first_number = 0.0;
double second_number = 0.0;
enum operator_type
{
add = '+',
sub = '-',
mul = '*',
dev = '/'
};
public:
virtual std::string getResult(){};
};
class AddOperator : public Calculator
{
public:
std::string getResult() override
{
return std::to_string(first_number + second_number);
}
};
class SubOperator : public Calculator
{
public:
std::string getResult() override
{
return std::to_string(first_number - second_number);
}
};
class MulOperator : public Calculator
{
public:
std::string getResult() override
{
return std::to_string(first_number * second_number);
}
};
class DivOperator : public Calculator
{
public:
std::string getResult() override
{
if (second_number == 0)
return "Error: divisor cannot be zero";
return std::to_string(first_number / second_number);
}
};
class CalculatorFactory
{
public:
std::shared_ptr<Calculator> creat_operator(Calculator::operator_type type)
{
switch (type)
{
case Calculator::operator_type::add:
return std::make_shared<AddOperator>();
break;
case Calculator::operator_type::sub:
return std::make_shared<SubOperator>();
break;
case Calculator::operator_type::mul:
return std::make_shared<MulOperator>();
break;
case Calculator::operator_type::dev:
return std::make_shared<DivOperator>();
break;
default:
break;
}
}
};
int main()
{
char a;
double b(0), c(0);
std::cin >> b >> a >> c;
CalculatorFactory factor;
auto oper = factor.creat_operator(Calculator::operator_type(a));
oper->first_number = b;
oper->second_number = c;
std::cout << b << a << c << "=" << oper->getResult() << std::endl;
}
本文参考:<<大话设计模式>>
|