简单工厂设计模式:也就是说,到底要实例化谁,将来会不会增加实例化的对象,这是很容易发生变化的地方,应该考虑用一个单独的类来做这个创建实例的过程,这就是工厂。 UML图如下: C++实现代码如下: /* Author: ACb0y Create Time: 2010年12月2日15:00:28 Model: simpleFactory */ #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; }