设计模式 - 工厂方法模式

定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类。

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;  
}




猜你喜欢

转载自blog.csdn.net/liyazhen2011/article/details/78673980