开闭原则 对扩展开放 对修改关闭

#include <iostream>
using namespace std;
//开闭原则 对扩展开放 对修改关闭
//增加功能是通过增加代码实现的 而不是去修改源代码
//写一个抽象类
class AbstractCaculator {
public:
virtual int getResult() = 0;
virtual void setOperatorNumer(int a, int b) = 0;
};
//加法计算器
class PlusCaculator : public AbstractCaculator {
public:
virtual void setOperatorNumer(int a, int b) {
this->mA = a;
this->mB = b;
}
virtual int getResult() {
return mA + mB;
}
public:
int mA;
int mB;
};
//减法计算器
class MinuteCaculator : public AbstractCaculator {
public:
virtual void setOperatorNumer(int a, int b) {
this->mA = a;
this->mB = b;
}
virtual int getResult() {
return mA - mB;
}
public:
int mA;
int mB;
};
//乘法计算器
class MultiplyCaculator : public AbstractCaculator {
public:
virtual void setOperatorNumer(int a, int b) {
this->mA = a;
this->mB = b;
}
virtual int getResult() {
return mA * mB;
}
public:
int mA;
int mB;
};
void test01() {
//通过抽象类的指针对象去接收一个加法类计算器
AbstractCaculator* caculator = new PlusCaculator;
caculator->setOperatorNumer(10,20);
cout << "ret: " << caculator->getResult() << endl;
delete caculator;
//利用同一个对象去接收减法类计算器
caculator = new MinuteCaculator;
caculator->setOperatorNumer(10, 20);
cout << "ret: " << caculator->getResult() << endl;
delete caculator;
}
int main() {
test01();
//输出结果:ret: 30
// ret: -10
return 0;
}

总结:可以看出 使用抽象类作为一个接口而不是把所有功能都写在一个计算器类内部虽然看上去代码量变得多了 但是对于后期想要添加一个新的运算功能非常友好
每个功能都是单独的一个类 不需要去修改源代码 直接加一个新的类就可以实现功能的增加 符合开闭原则