设计模式之开放封闭原则
生活随笔
收集整理的这篇文章主要介绍了
设计模式之开放封闭原则
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
以下皆是个人理解如有不对请留言指出,谢谢!
我就代码提出我自己个人的看法:
正常定义一个类例如银行工作员,他可以执行存款,付款和转账功能,如果在现有功能上我想添加贷款功能,需要在类中添加新的功能对应的方法,那就会破坏类的封装性,修改了源代码。这时候就需要我们定义一个抽象类,他没有具体的执行哪种工作,只是有一个抽象的工作的纯虚函数。然后通过派生派生出具有若干具体功能的子类,之后如果我们想要添加新的功能就不要在类的内部进行修改,而是添加新的实现相应新功能的子类,这样就不会破坏类的封装性。这也体现了开放封闭的原则:类的改动是通过增加代码进行的,而不是修改源代码。
简单来说就是:对扩展是开放的,而对修改是封闭的
对扩展开放:意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。
对修改封闭:意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。
开放封闭原则实例:
#include <iostream> using namespace std;class BankWorker { public:void payM(){cout << "付款" << endl;}void saveM(){cout << "存款" << endl;}void zhuanzhang(){cout << "转账" << endl;}// ---------------- 增加新功能void daikuan(){cout << "贷款" << endl;} };// 业务员的抽象类 class AbsBankWorker { public:virtual void work() = 0; // 业务员的工作 };// 负责付款的业务员 class PayMWorker : public AbsBankWorker { public:virtual void work(){cout << "付款" << endl;} };// 负责存款的业务员 class SaveMWorker : public AbsBankWorker { public:virtual void work(){cout << "存款" << endl;} };// 负责转账的业务员 class zhuanZhangWorker : public AbsBankWorker { public:virtual void work(){cout << "转账" << endl;} };class DaikuanWorker:public AbsBankWorker { public:virtual void work(){cout << "贷款" << endl;} };// 去银行办业务 void func(AbsBankWorker *abk) {abk->work(); // 办业务 }int main() { /*BankWorker *bk = new BankWorker;bk->payM();bk->saveM();bk->zhuanzhang(); */AbsBankWorker *abs = NULL;// 付款abs = new PayMWorker; // 找一个付款业务员func(abs);delete abs; // 业务结束,让人家离开// 存款abs = new SaveMWorker;func(abs);delete abs;// 转账abs = new zhuanZhangWorker;func(abs);delete abs;// ---------------------------// 贷款abs = new DaikuanWorker;func(abs);delete abs;return 0; }总结
以上是生活随笔为你收集整理的设计模式之开放封闭原则的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: C++之泛型编程(模板)
- 下一篇: 设计模式之创建者模式