用简单工厂模式实现计算机的加减乘除(C++实现)

       要变复制为复用、把业务逻辑与界面逻辑分开,这样才能实现程序的可维护,可复用,可扩展,灵活性
在这里插入图片描述

       将来有可能继续增加实例化的对象,如计算器增加开方运算等等,这个时候考虑单独用一个类来做这个创造实例的过程,这就是工厂

#include <iostream>
#include <string.h>
using namespace std;

//实现计算机抽象类
class AbstractCalculator{
    
    

public:
    virtual ~AbstractCalculator(){
    
    
    }
    virtual double getResult(){
    
    
        return 0;
    }
    double m_Num1;
    double m_Num2;
};

//加法类
class ADDCalculator:public AbstractCalculator{
    
    
    
public:
    virtual double getResult(){
    
    
        return m_Num1 + m_Num2;
    } 
};

//减法类
class SUbCalculator:public AbstractCalculator{
    
    
    
public:
    virtual double getResult(){
    
    
        return m_Num1 - m_Num2;
    } 
};

//乘法类
class MulCalculator:public AbstractCalculator{
    
    
    
public:
    virtual double getResult(){
    
    
        return m_Num1 * m_Num2;
    } 
};
//除法类
class DivCalculator:public AbstractCalculator{
    
    
    
public:
    virtual double getResult(){
    
    
        if(m_Num2 == 0){
    
    
            cout << "errro, num2 must be not zero !!!" << endl;
            return 0;
        }else{
    
    
            return m_Num1 / m_Num2;
        }
    } 
};

class OperatorFactory{
    
       
public:
    AbstractCalculator* creatOperate(string str){
    
    
        AbstractCalculator *oper = NULL;
        
        if(str == "+"){
    
    
            oper = new(ADDCalculator);
        }else if (str == "-"){
    
    
            oper= new(SUbCalculator);
        }else if (str == "*"){
    
    
            oper = new(MulCalculator);
        }else if (str == "/"){
    
    
            oper = new(DivCalculator);
        }else{
    
    
            cout << "false!!!!!" << endl;
        }
        return oper;
    }
};

int main(){
    
    
    AbstractCalculator *oper;
    OperatorFactory factory;
    oper = factory.creatOperate("+");
    oper->m_Num1 = 1999;
    oper->m_Num2 = 7234.44;
    cout << oper->m_Num1 << " + " << oper->m_Num2 << " = " << oper->getResult() << endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_44515978/article/details/119788002