设计模式之开放封闭原则
生活随笔
收集整理的這篇文章主要介紹了
设计模式之开放封闭原则
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
以下皆是個人理解如有不對請留言指出,謝謝!
我就代碼提出我自己個人的看法:
正常定義一個類例如銀行工作員,他可以執行存款,付款和轉賬功能,如果在現有功能上我想添加貸款功能,需要在類中添加新的功能對應的方法,那就會破壞類的封裝性,修改了源代碼。這時候就需要我們定義一個抽象類,他沒有具體的執行哪種工作,只是有一個抽象的工作的純虛函數。然后通過派生派生出具有若干具體功能的子類,之后如果我們想要添加新的功能就不要在類的內部進行修改,而是添加新的實現相應新功能的子類,這樣就不會破壞類的封裝性。這也體現了開放封閉的原則:類的改動是通過增加代碼進行的,而不是修改源代碼。
簡單來說就是:對擴展是開放的,而對修改是封閉的
對擴展開放:意味著有新的需求或變化時,可以對現有代碼進行擴展,以適應新的情況。
對修改封閉:意味著類一旦設計完成,就可以獨立完成其工作,而不要對類進行任何修改。
開放封閉原則實例:
#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++之泛型编程(模板)
- 下一篇: 设计模式之创建者模式