//实现计算器类
//普通写法
class Calculator{
public:
int getResult(string oper){
if(oper=="+"){
return m_Num1 + m_Num2;
}
else if(oper=="-"){
return m_Num1 - m_Num2;
}
else if(oper=="*"){
return m_Num1 * m_Num2;
}
//如果想扩展新的功能,需要修改源码
//提倡 开闭原则:对扩展进行开放,对修改进行关闭
return 0;
}
int m_Num1;
int m_Num2;
};
void test09(){
Calculator c;
c.m_Num1 = 10;
c.m_Num2 = 20;
cout<m_Num1 = 10;
abc->m_Num2 = 20;
coutm_Num1 = 10;
abc->m_Num2 = 20;
coutm_Num1 = 10;
abc->m_Num2 = 20;
cout可读性强
//有利于扩展和 维护性
//【之前都是要自己创建对象】
//运算类工厂,
//传入参数,【让工厂去创建相应对象】
//不符合开闭原则,每增加一个运算,都得修改下列代码
class OperationFactory{
public:
static AbstractCalculator* createCalculator(string operate){
AbstractCalculator* abc = NULL;
//父类指针指向子类对象
if(operate=="+"){
abc = new AddCalculator;
}
else if(operate=="-"){
abc = new SubCalculator;
}
else if(operate=="*"){
abc = new MulCalculator;
}
return abc;
}
};
//客户端代码,不需要关心对象的创建过程
//由一个工厂生成所有对象:加法计算器/减法计算器/乘法计算器
void test11(){
AbstractCalculator * abc = NULL;
OperationFactory* factory = new OperationFactory; //指向工厂的指针
//不需要关心对象的创建过程
//只要输入运算符号,工厂就能实例化出合适的对象
abc = factory->createCalculator("+");
abc->m_Num1 = 10;
abc->m_Num2 = 20;
coutcreateCalculator("-");
abc->m_Num1 = 10;
abc->m_Num2 = 20;
coutcreateCalculator("*");
abc->m_Num1 = 10;
abc->m_Num2 = 20;
cout