編程就像一門藝術(shù)菜皂;
一段漂亮的代碼贞绵,不僅要簡潔易讀,而且可以被反復(fù)利用恍飘;
設(shè)計模式就是一套唄反復(fù)使用榨崩、多數(shù)人知曉的谴垫、經(jīng)過分類編目的、代碼設(shè)計經(jīng)驗的
總結(jié)蜡饵。使用設(shè)計模式是為了可重用代碼弹渔、讓代碼更容易被他人理解、保證代碼可靠性溯祸。
毫無疑問肢专,設(shè)計模式于己于他人于系統(tǒng)都是多贏的;設(shè)計模式使代碼編制真正工程化焦辅;
設(shè)計模式是軟件工程的基石脈絡(luò)博杖,如同大廈的結(jié)構(gòu)一樣。
1.設(shè)計模式的原則
① 開閉原則
原理:模塊應(yīng)對擴(kuò)展開發(fā)筷登,而對修改關(guān)閉剃根;
模塊的行為是可以擴(kuò)展的,當(dāng)應(yīng)用的需求改變是前方,我們可以對模塊進(jìn)行擴(kuò)展狈醉,是其
具有滿足那些改變的新行為,即我們可以改變模塊的功能惠险;
對模塊行為進(jìn)行擴(kuò)展時苗傅,不必改動模塊的源代碼。
② 里氏代換原則(LSP)
原理:任何基類可以出現(xiàn)的地方班巩,子類一定可以出現(xiàn)渣慕;
LSP是繼承復(fù)用的基石,只有當(dāng)衍生類可以替換掉基類抱慌,軟件單位的功能不受到影響
時逊桦,基類才能真正被復(fù)用,而衍生類也能夠在基類的基礎(chǔ)上增加新的行為抑进。
③ 接口隔離原則:
原理:客戶端不應(yīng)該依賴他不需要的接口强经,一個類對另一個類的依賴應(yīng)該建立在最小
的接口上。
一個接口代表一個角色寺渗,不應(yīng)當(dāng)將不同的角色都交給一個接口夕凝,沒有關(guān)系的接口合并
在一起,形成了一個臃腫的大街口户秤,這是對角色和接口的污染。
④ 依賴倒轉(zhuǎn)原則:
原理:程序要依賴于抽象接口逮矛,不要依賴于具體實現(xiàn)鸡号;
高層次的模塊不應(yīng)該依賴于低層次的模塊,他們都應(yīng)該依賴于抽象须鼎;
抽象不應(yīng)該依賴于具體鲸伴,具體應(yīng)該依賴于抽象府蔗;
⑤ 合成/聚合復(fù)用原則:
合成/聚合復(fù)用原則就是在一個新的對象里面使用一些已有的對象,使之成為新的對象汞窗,
新的對象通過向這些對象的委派達(dá)到復(fù)用已有功能的目的姓赤。
他的設(shè)計原則是:盡量使用合成/聚合,盡量不要使用繼承仲吏。
⑥ 最少知識原則:(迪米特法則)
原理:一個對象應(yīng)當(dāng)對其他對象有盡少可能的了解不铆,不和陌生人說話;
2.設(shè)計模式的分類:
設(shè)計模式共23中裹唆,共分為九種類型誓斥。
① 創(chuàng)造型模式:
單例模式、抽象工廠模式许帐、生成器模式劳坑、工廠模式、原型模式成畦;
② 接口適配
適配器模式距芬、橋接模式、外觀模式循帐;
③ 對象去耦
中介者模式框仔、觀察者模式;
④ 抽象集合
組合模式惧浴、迭代器模式存和;
⑤ 行為擴(kuò)展
訪問者模式、裝飾模式衷旅、責(zé)任鏈模式捐腿;
⑥ 算法封裝
模板方法、策略模式柿顶、命令模式茄袖;
⑦ 性能與對象訪問
享元模式、代理模式嘁锯;
⑧ 對象狀態(tài)模式
備忘錄模式
③ 其他兩種:
解釋器模式宪祥、狀態(tài)模式。