现在的位置: 首页 > 综合 > 正文

c++设计模式—简单工厂模式

2018年03月21日 ⁄ 综合 ⁄ 共 3600字 ⁄ 字号 评论关闭

C++ 简单工厂模式:

 

例如用面向对象的方法写一个计算器的控制台程序。

一般我们会先写个运算类作为基类,该类中有个getResult的虚函数。然后再写相应的子类(加、减、乘、除)并多态的实现getResult函数。

在main函数中,当我们选择了那种运算符就初始化一个运算类的对象。

 

“简单工厂模式”,就是说,到底要实例化谁,将来会不会增加实例化对象,应该考虑一个单独的类来做这个创造实例化的过程,这就是工厂。

 

简单运算工厂类:

 

class OperationFactory

{

public:

       Operation* createoperation(double num1,double num2,char operate)

       {

              oper=NULL;

              switch(operate)

              {

              case'+' :

                     oper=newOperationAdd(num1,num2);

                     break;

              case'-' :

                     oper=newOperationSub(num1,num2);

                     break;

              case'*' :

                     oper=newOperationMul(num1,num2);              

                     break;

              case'/' :

                     oper=newOperationDiv(num1,num2);

                    

                     break;

              default:

                     break;

      

              }

              returnoper;

       }

       ~OperationFactory()

       {

              deleteoper;

       }

private:

       Operation*oper;

};

 

 

简单工厂模式-计算器 完整代码:

 

#include<iostream>

#include<string>

using namespace std;

 

class Operation

{

public:

       Operation():num1(0),num2(0){}

       voidsetnum1(double num1)

       {

              this->num1=num1;

       }

       Operation(doublenum1,double num2):num1(num1),num2(num2){}

       voidsetnum2(double num2)

       {

              this->num2=num2;

 

       }

       doublegetnum1()

       {

              returnnum1;

       }

       doublegetnum2()

       {

              returnnum2;

       }

 

       virtualdouble getResult()

       {

              return0;

 

       }

protected:

       doublenum1;

       doublenum2;

 

};

 

class OperationAdd: virtual publicOperation

{

public:

       OperationAdd(doublenum1,double num2):Operation(num1,num2){}

       doublegetResult()

       {

              doubleresult=0;

              result=num1+num2;

              returnresult;

       }

 

      

};

 

class OperationSub: virtual publicOperation

{

public:

       OperationSub(doublenum1,double num2):Operation(num1,num2){}

       doublegetResult()

       {

              returnnum1-num2;

       }

};

 

class OperationMul: virtual publicOperation

{

public:

       OperationMul(doublenum1,double num2):Operation(num1,num2){}

       doublegetResult()

       {

              returnnum1*num2;

       }

};

 

class OperationDiv: virtual publicOperation

{

public:

       OperationDiv(doublenum1,double num2):Operation(num1,num2){}

       doublegetResult()

       {

             

              if(num2==0)

              {

                     cout<<"除数不能为0!"<<endl;

                     return0;

              }

              returnnum1/num2;

       }

};

 

 

class OperationFactory

{

public:

       Operation* createoperation(double num1,double num2,char operate)

       {

              oper=NULL;

              switch(operate)

              {

              case'+' :

                     oper=newOperationAdd(num1,num2);

                     break;

              case'-' :

                     oper=newOperationSub(num1,num2);

                     break;

              case'*' :

                     oper=newOperationMul(num1,num2);              

                     break;

              case'/' :

                     oper=newOperationDiv(num1,num2);

                    

                     break;

              default:

                     break;

      

              }

              returnoper;

       }

       ~OperationFactory()

       {

              deleteoper;

       }

private:

       Operation*oper;

};

 

 

int main()

{

       cout<<"请输入进行的运算:+、-、*、/"<<endl;

       charoperate;

       cin>>operate;

       cout<<"请输入两个数值:"<<endl;

       doublenum1,num2;

       cin>>num1>>num2;

 

       OperationFactoryof;

       double  result;

       result=of.createoperation(num1,num2,operate)->getResult();

       cout<<"运算结果为:"<<result<<endl;

       return0;

}

 

抱歉!评论已关闭.