定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类。
1.Operation运算类
class Operation { public: virtual double GetResult(double Num1, double Num2) { return 0; } };
2.加减乘除类
class OperationAdd : public Operation { virtual double GetResult(double Num1, double Num2) { return Num1 + Num2; } }; class OperationSub : public Operation { virtual double GetResult(double Num1, double Num2) { return Num1 - Num2; } }; class OperationMul : public Operation { virtual double GetResult(double Num1, double Num2) { return Num1 * Num2; } }; class OperationDiv : public Operation { virtual double GetResult(double Num1, double Num2) { if(Num2 == 0) { throw new exception("除数不能为0"); } return Num1 / Num2; } };
3.运算工厂类
class OperationFactory { public: virtual Operation* CreateOperation() = 0; };
4.加减乘除工厂类
class AddFactory : public OperationFactory { virtual Operation* CreateOperation() { return new OperationAdd(); } }; class SubFactory : public OperationFactory { virtual Operation* CreateOperation() { return new OperationSub(); } }; class MulFactory : public OperationFactory { virtual Operation* CreateOperation() { return new OperationMul(); } }; class DivFactory : public OperationFactory { virtual Operation* CreateOperation() { return new OperationDiv(); } };
5.客户端代码
int main() { OperationFactory *Fact = new AddFactory(); Operation* Oper = Fact->CreateOperation(); double result = Oper->GetResult(2, 5); std::cout << "result = " << result << std::endl; system("pause"); return 0; }