c++设计模式—简单工厂模式
来源:互联网 发布:在线客服系统源码 编辑:程序博客网 时间:2024/04/29 14:48
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;
}
- C#--简单工厂设计模式
- 设计模式 - 简单工厂模式(C++)
- C#--设计模式之简单工厂模式
- 设计模式——简单工厂模式(C++)
- 设计模式之简单工厂,工厂方法模式(c++)
- 设计模式——简单工厂模式
- 设计模式——简单工厂模式
- 设计模式——简单工厂模式
- 设计模式——简单工厂模式
- 设计模式——简单工厂模式
- 【设计模式】——简单工厂模式
- 设计模式——简单工厂模式
- 设计模式——简单工厂模式
- 设计模式——简单工厂模式
- 设计模式——简单工厂模式
- 设计模式——简单工厂模式
- 设计模式——简单工厂模式
- 设计模式——简单工厂模式
- MPU-存储保护单元概述
- The Next Permutation
- 线性表的应用
- Vc内存错误码大全
- iOS的日历控件开源代码
- c++设计模式—简单工厂模式
- Linux SVN 命令详解
- CoreAnimation编程指南(四)图层树结构
- 64位系统asp连接access数据库
- hudson 构建项目时错误:java.lang.StackOverflowExcption
- Android GridView中GridAdapter 用法详解
- mysql建立临时表
- UVA 102 - Ecological Bin Packing(动态规划)
- jquery上传图片验证