1、简单工厂设计模式:也就是说,到底要实例化谁,将来会不会增加实例化的对象,这是很容易发生变化的地方,应该考虑用一个单独的类来做这个创建实例的过程,这就是工厂。
UML图如下:
2、C++代码实现
- #include <iostream>
- using namespace std;
- /* 运算类 */
- class Operation
- {
- public:
- //左值
- double leftValue;
- //右值
- double rightValue;
- //纯虚函数,定义了一个运算结果的接口。
- virtual double GetResult() = 0;
- };
- /* 加法运算类,实现加法接口 */
- class Add : public Operation
- {
- public:
- double GetResult();
- };
- double Add::GetResult()
- {
- return leftValue + rightValue;
- }
- /* 减法运算类,实现减法接口 */
- class Minus : public Operation
- {
- public:
- double GetResult();
- };
- double Minus::GetResult()
- {
- return leftValue - rightValue;
- }
- /* 乘法运算类,实现乘法接口 */
- class Multi : public Operation
- {
- public:
- double GetResult();
- };
- double Multi::GetResult()
- {
- return leftValue * rightValue;
- }
- /* 除法运算类,实现除法接口 */
- class Division : public Operation
- {
- public:
- double GetResult();
- };
- double Division::GetResult()
- {
- return leftValue / rightValue;
- }
- /* 工厂类,根据不同的需求生产不同的运算类 */
- class OperationFactory
- {
- public:
- Operation * CreateOperate(char);
- };
- Operation * OperationFactory::CreateOperate(char type)
- {
- switch (type)
- {
- case '*':
- return new Multi();
- break;
- case '/':
- return new Division();
- break;
- case '+':
- return new Add();
- break;
- case '-':
- return new Minus();
- break;
- default:
- return new Add();
- break;
- }
- }
- int main()
- {
- int n;
- freopen("in.txt", "r", stdin);
- OperationFactory factory;
- scanf("%d", &n);
- while (n--)
- {
- double leftValue;
- double rightValue;
- char type;
- cin >> leftValue >> rightValue >> type;
- Operation * operation = factory.CreateOperate(type);
- operation->leftValue = leftValue;
- operation->rightValue = rightValue;
- cout << operation->leftValue << " " << type << " "
- << operation->rightValue << " = " << operation->GetResult() << endl;
- }
- return 0;
- }