Creational.SimpleFactory简单工厂模式:提供操作符返回运算对象

//提供一个创建对象实例的功能,而无须关心其具体实现



//声明文件

//运算类(其它的加减乘法类从这里继承)
class CAbsOpt{
protected:
    double dNumber1;
    double dNumber2;
public:
    void SetNumber1(double number);
    double GetNumber1();
    void SetNumber2(double number);
    double GetNumber2();
    virtual double GetResult() = 0;
};
//加法类
class CAdd : public CAbsOpt{
public:
    double GetResult();
};
//减法类
class CSub : public CAbsOpt{
public:
    double GetResult();
};
//乘法类
class CMul : public CAbsOpt{
public:
    double GetResult();
};
//除法类
class CDiv : public CAbsOpt{
public:
    double GetResult();
};

//简单工厂类
class CSimpleFac{
public:
    static CAbsOpt* Calc(char cOpt);

};


//实现文件

//运算类(其它的加减乘法类从这里继承)
void CAbsOpt::SetNumber1(double number){dNumber1 = number;}
double CAbsOpt::GetNumber1(){return dNumber1;}
void CAbsOpt::SetNumber2(double number){dNumber2 = number;}
double CAbsOpt::GetNumber2(){return dNumber2;}
//加法类
double CAdd::GetResult(){return (dNumber1 + dNumber2);}
//减法类
double CSub::GetResult(){return (dNumber1 - dNumber2);}
//乘法类
double CMul::GetResult(){return (dNumber1 * dNumber2);}
//除法类
double CDiv::GetResult()
{
    const double dZero = 0.000000000000001;
    if((-dZero < dNumber2) && (dNumber2 < dZero))/*除数为0*/    return 0;
    return (dNumber1 / dNumber2);
}

//简单工厂类
CAbsOpt* CSimpleFac::Calc(char cOpt)
{
    CAbsOpt* pOpt = NULL;
    if(cOpt == '+')            pOpt = new CAdd();
    else if(cOpt == '-')        pOpt = new CSub();
    else if(cOpt == '*')        pOpt = new CMul();
    else if(cOpt == '/')        pOpt = new CDiv();
    return pOpt;

}




//测试客户端

void main()
{
    CAbsOpt* pOpt = CSimpleFac::Calc('/');
    pOpt->SetNumber1(12); pOpt->SetNumber2(4);
    cout << pOpt->GetNumber1() << "/" << pOpt->GetNumber2() << " = " << pOpt->GetResult() << endl;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值