單一職責(zé)原則(SRP)(Single Responsiblility Principle)
一個(gè)類(lèi)只做一種類(lèi)型責(zé)任边苹,當(dāng)這個(gè)類(lèi)需要承當(dāng)其他類(lèi)型的責(zé)任的時(shí)候审丘,就需要分解這個(gè)類(lèi)。不過(guò)在現(xiàn)實(shí)開(kāi)發(fā)中勾给,這個(gè)原則是最不可能遵守的滩报,因?yàn)槊總€(gè)人對(duì)一個(gè)類(lèi)的哪些功能算是同一類(lèi)型的職責(zé)判斷都不相同。
開(kāi)放-關(guān)閉原則(OCP)(Open Close Principle)
軟件實(shí)體應(yīng)該是可擴(kuò)展播急,而不可修改的脓钾。也就是說(shuō),你寫(xiě)完一個(gè)類(lèi)桩警,要想添加功能可训,不能修改原有類(lèi),而是想辦法擴(kuò)展該類(lèi)捶枢。有多種設(shè)計(jì)模式可以達(dá)到這一要求握截。
對(duì)拓展開(kāi)放,對(duì)修改關(guān)閉烂叔。
里氏替換原則(LSP)(Liskov Subsititution Principle)
當(dāng)一個(gè)子類(lèi)的實(shí)例應(yīng)該能夠替換任何其超類(lèi)的實(shí)例時(shí)谨胞,它們之間才具有is-A關(guān)系。也就是說(shuō)接口或父類(lèi)出現(xiàn)的地方蒜鸡,實(shí)現(xiàn)接口的類(lèi)或子類(lèi)可以代入胯努,這主要依賴(lài)于多態(tài)和繼承牢裳。
依賴(lài)倒置原則(DIP)(Dependence Inversion Principle)
高層模塊不應(yīng)該依賴(lài)于低層模塊,二者都應(yīng)該依賴(lài)于抽象
抽象不應(yīng)該依賴(lài)于細(xì)節(jié)叶沛,細(xì)節(jié)應(yīng)該依賴(lài)于抽象
接口隔離原則(ISP)(Interface segregation Principle)
不能強(qiáng)迫用戶(hù)去依賴(lài)那些他們不使用的接口蒲讯。換句話(huà)說(shuō),使用多個(gè)專(zhuān)門(mén)的接口比使用單一的總接口總要好灰署。 不要提供一個(gè)大的接口包括所有功能判帮,應(yīng)該根據(jù)功能把這些接口分割,減少依賴(lài)溉箕。
最少知識(shí)原則(LKP)(Least Knowledge Principle)
設(shè)計(jì)系統(tǒng)時(shí)候脊另,盡量減少對(duì)象間的耦合,方法調(diào)用必須保持在一定的界限范圍之類(lèi)约巷,盡量減少對(duì)象的依賴(lài)關(guān)系偎痛。
其他原則
- 面向接口編程
- 優(yōu)先使用組合,而非繼承
- 一個(gè)類(lèi)需要的數(shù)據(jù)應(yīng)該隱藏在類(lèi)的內(nèi)部
- 類(lèi)之間應(yīng)該零耦合独郎,或者只有傳導(dǎo)耦合踩麦,換句話(huà)說(shuō),類(lèi)之間要么沒(méi)有關(guān)系氓癌,要么只使用另一個(gè)類(lèi)的接口提供的操作
- 水平方向上盡可能統(tǒng)一地分布系統(tǒng)功能谓谦;
我們?cè)趯?xiě)代碼的時(shí)候最痛苦的莫過(guò)于改需求,因?yàn)槊看胃男枨筇巴瘢紩?huì)導(dǎo)致代碼的大改動(dòng)反粥,所以我們應(yīng)該把經(jīng)常變動(dòng)的地方封裝起來(lái),讓這些地方的變動(dòng)不影響其他地方疲迂。這就是設(shè)計(jì)模式的主要作用才顿。