設(shè)計(jì)模式的六大原則
- 單一職責(zé)原則(Single responsibility principle):一個(gè)類(lèi)的職責(zé)應(yīng)該單一
- 如果一個(gè)類(lèi)職責(zé)過(guò)多,應(yīng)該拆分
(類(lèi)如果職責(zé)單一,那導(dǎo)致類(lèi)修改的原因也會(huì)唯一,不會(huì)因?yàn)槎喾N原因都要去修改類(lèi))
- 開(kāi)放-關(guān)閉原則(Open Close Principle):也叫開(kāi)閉原則,要求程序?qū)U(kuò)展開(kāi)放,對(duì)修改關(guān)閉
- 在程序擴(kuò)展新功能時(shí),不修改原有代碼,而是進(jìn)行擴(kuò)展,使程序的擴(kuò)展性好,維護(hù)性好
- 里氏替換原則(Liskov Substitution Principle):所有父類(lèi)出現(xiàn)的地方,子類(lèi)都能替換,并且結(jié)果不變
- 子類(lèi)可以實(shí)現(xiàn)父類(lèi)的抽象方法,但子類(lèi)不應(yīng)該重寫(xiě)父類(lèi)已實(shí)現(xiàn)的方法
- 子類(lèi)可以增加自己的獨(dú)有方法
- 子類(lèi)的方法重載父類(lèi)的方法時(shí),方法的形參要比父類(lèi)方法的形參更寬松
- 子類(lèi)的方法實(shí)現(xiàn)父類(lèi)的抽象方法時(shí),方法的返回值要比分類(lèi)更嚴(yán)格
- 接口隔離原則(Interface Segregation Principle):每個(gè)接口中都不存在子類(lèi)用不到又必須實(shí)現(xiàn)的方法
- 如果存在,需要拆分
- 依賴倒轉(zhuǎn)原則(Dependence Inversion Principle):應(yīng)該面對(duì)接口編程,而不是面對(duì)細(xì)節(jié)編程
- 高層模塊不依賴底層,兩個(gè)都應(yīng)該依賴接口(一個(gè)模塊引用了鏈接數(shù)據(jù)庫(kù)的代碼,高層依賴了底層,如果替換數(shù)據(jù)庫(kù)時(shí),需求修改高層代碼,無(wú)法復(fù)用,如果依賴接口,則新增數(shù)據(jù)庫(kù)鏈接實(shí)現(xiàn)類(lèi)即可)
- 抽象不應(yīng)該依賴細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴抽象
(以上原則英文首字母組成SOLID,又叫SOLID準(zhǔn)則)
- 迪米特法則(又叫最少知道原則)(Law of Demeter):如果兩個(gè)二類(lèi)不必彼此直接通信,那么這兩個(gè)類(lèi)就不應(yīng)當(dāng)發(fā)生直接的相互作用
- 一個(gè)類(lèi)對(duì)自己依賴的類(lèi)知道的越少越好。也就是說(shuō)無(wú)論被依賴的類(lèi)多么復(fù)雜,都應(yīng)該將邏輯封裝在方法的內(nèi)部,通過(guò)public方法提供給外部。這樣當(dāng)被依賴的類(lèi)變化時(shí),才能最小的影響該類(lèi)
- 只與直接的朋友通信。類(lèi)之間只要有耦合關(guān)系,就叫朋友關(guān)系。耦合分為依賴、關(guān)聯(lián)、聚合、組合等。我們稱出現(xiàn)為成員變量、方法參數(shù)、方法返回值中的類(lèi)為直接朋友。局部變量、臨時(shí)變量則不是直接的朋友。我們要求陌生的類(lèi)不要作為局部變量出現(xiàn)在類(lèi)中
總結(jié):原則應(yīng)該根據(jù)實(shí)際情況來(lái)盡量滿足,也不用一味糾結(jié)于是否滿足原則。
|