设计模式之开放封闭原则
生活随笔
收集整理的這篇文章主要介紹了
设计模式之开放封闭原则
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
以下皆是個(gè)人理解如有不對請留言指出,謝謝!
我就代碼提出我自己個(gè)人的看法:
正常定義一個(gè)類例如銀行工作員,他可以執(zhí)行存款,付款和轉(zhuǎn)賬功能,如果在現(xiàn)有功能上我想添加貸款功能,需要在類中添加新的功能對應(yīng)的方法,那就會破壞類的封裝性,修改了源代碼。這時(shí)候就需要我們定義一個(gè)抽象類,他沒有具體的執(zhí)行哪種工作,只是有一個(gè)抽象的工作的純虛函數(shù)。然后通過派生派生出具有若干具體功能的子類,之后如果我們想要添加新的功能就不要在類的內(nèi)部進(jìn)行修改,而是添加新的實(shí)現(xiàn)相應(yīng)新功能的子類,這樣就不會破壞類的封裝性。這也體現(xiàn)了開放封閉的原則:類的改動是通過增加代碼進(jìn)行的,而不是修改源代碼。
簡單來說就是:對擴(kuò)展是開放的,而對修改是封閉的
對擴(kuò)展開放:意味著有新的需求或變化時(shí),可以對現(xiàn)有代碼進(jìn)行擴(kuò)展,以適應(yīng)新的情況。
對修改封閉:意味著類一旦設(shè)計(jì)完成,就可以獨(dú)立完成其工作,而不要對類進(jìn)行任何修改。
開放封閉原則實(shí)例:
#include <iostream> using namespace std;class BankWorker { public:void payM(){cout << "付款" << endl;}void saveM(){cout << "存款" << endl;}void zhuanzhang(){cout << "轉(zhuǎn)賬" << endl;}// ---------------- 增加新功能void daikuan(){cout << "貸款" << endl;} };// 業(yè)務(wù)員的抽象類 class AbsBankWorker { public:virtual void work() = 0; // 業(yè)務(wù)員的工作 };// 負(fù)責(zé)付款的業(yè)務(wù)員 class PayMWorker : public AbsBankWorker { public:virtual void work(){cout << "付款" << endl;} };// 負(fù)責(zé)存款的業(yè)務(wù)員 class SaveMWorker : public AbsBankWorker { public:virtual void work(){cout << "存款" << endl;} };// 負(fù)責(zé)轉(zhuǎn)賬的業(yè)務(wù)員 class zhuanZhangWorker : public AbsBankWorker { public:virtual void work(){cout << "轉(zhuǎn)賬" << endl;} };class DaikuanWorker:public AbsBankWorker { public:virtual void work(){cout << "貸款" << endl;} };// 去銀行辦業(yè)務(wù) void func(AbsBankWorker *abk) {abk->work(); // 辦業(yè)務(wù) }int main() { /*BankWorker *bk = new BankWorker;bk->payM();bk->saveM();bk->zhuanzhang(); */AbsBankWorker *abs = NULL;// 付款abs = new PayMWorker; // 找一個(gè)付款業(yè)務(wù)員func(abs);delete abs; // 業(yè)務(wù)結(jié)束,讓人家離開// 存款abs = new SaveMWorker;func(abs);delete abs;// 轉(zhuǎn)賬abs = new zhuanZhangWorker;func(abs);delete abs;// ---------------------------// 貸款abs = new DaikuanWorker;func(abs);delete abs;return 0; }總結(jié)
以上是生活随笔為你收集整理的设计模式之开放封闭原则的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++之泛型编程(模板)
- 下一篇: Weekly 10