前言:
最近在看設(shè)計(jì)模式颓影,本文僅作為第一次學(xué)習(xí)設(shè)計(jì)模式的筆記各淀。
僅作為學(xué)習(xí)參考。如有不足诡挂,希望各位大神能指出碎浇,我修改临谱。
另外,所有的設(shè)計(jì)原則不是絕對(duì)的奴璃,要根據(jù)實(shí)際項(xiàng)目作出相應(yīng)的妥協(xié)和調(diào)整才能達(dá)到最好的效果悉默。
本文僅說(shuō)明理論,具體的 需要“代碼量的積累”和“寫前的思考” 才能實(shí)現(xiàn)苟穆。
1. 單一職責(zé)原則:SRP
定義:應(yīng)該有且僅有一個(gè)原因引起類的變更抄课。
即 “一個(gè)職責(zé)一個(gè)接口”。
職責(zé)分明雳旅,結(jié)構(gòu)清晰跟磨。例如:用戶的屬性和用戶的行為,需要分開寫成兩個(gè)接口岭辣。
一個(gè)為用戶的行為吱晒,一個(gè)為用戶的屬性。原話:There should never be more than one reason for a class to change.
好處:
- 降低類的復(fù)雜性
- 可讀性提高
- 可維護(hù)性提高
- 耦合性降低沦童,變更引起的風(fēng)險(xiǎn)降低
2. 里氏替換原則:LSP
定義:只要父類能出現(xiàn)的地方子類就可以出現(xiàn)仑濒。
其中包括4層:
1.子類必須完全實(shí)現(xiàn)父類的方法
2.子類可以有自己的個(gè)性
3.覆蓋或?qū)崿F(xiàn)父類的方法時(shí)輸入?yún)?shù)可以被放大
4.覆寫或?qū)崿F(xiàn)父類的方法時(shí)輸出結(jié)果可以被縮小目的:增加程序的健壯性,添加子類偷遗,原有子類還可以繼續(xù)運(yùn)行墩瞳。
傳遞不同的子類完成不同的業(yè)務(wù)邏輯。
3. 依賴倒置原則:DIP
含義:
1.高層模塊不能依賴底層模塊氏豌,模塊都應(yīng)該依賴其抽象
2.抽象不應(yīng)該依賴細(xì)節(jié)
3.細(xì)節(jié)應(yīng)該依賴抽象實(shí)現(xiàn):
1.模塊間依賴抽象喉酌,實(shí)現(xiàn)類之間不發(fā)生直接的依賴關(guān)系,其依賴關(guān)系通過(guò)接口或抽象類產(chǎn)生的
2.接口或抽象類不依賴于實(shí)現(xiàn)類
3.實(shí)現(xiàn)類依賴接口或抽象類好處:減少類間的耦合性泵喘,提高系統(tǒng)的穩(wěn)定性泪电,降低并行開發(fā)引起的風(fēng)險(xiǎn),提高代碼的可讀性和可維護(hù)性纪铺。
寫法:如何模板依賴抽象相速?
1.構(gòu)造函數(shù)傳遞依賴對(duì)象
2.Setter方法傳遞依賴對(duì)象
3.接口聲明依賴對(duì)象最佳實(shí)踐:
1.每個(gè)類盡量都有抽象類或接口
2.變量的表面類型盡量是接口或者是抽象類
3.任何類都不應(yīng)該從具體類派生
4.盡量不要覆寫基類的方法
4. 接口隔離原則:ISP
定義:客戶端應(yīng)僅依賴它需要的接口
1.客戶端不應(yīng)該依賴它不需要的接口
2.類間的依賴關(guān)系應(yīng)該建立在最小的接口上寫法:
1.接口要盡量小,職責(zé)單一鲜锚,符合單一職責(zé)突诬。
2.通過(guò)業(yè)務(wù)邏輯壓縮接口中的public方法(滿身筋骨肉)最佳實(shí)踐:
1.一個(gè)接口只服務(wù)于一個(gè)子模塊(業(yè)務(wù)邏輯)
2.通過(guò)業(yè)務(wù)邏輯壓縮接口中的public方法(滿身筋骨肉)
3.已經(jīng)污染了的接口,盡量去修改芜繁,風(fēng)險(xiǎn)大用適配器模式旺隙。
5. 迪米特法則:LoD
又叫“最小知識(shí)原則”
定義:一個(gè)對(duì)象應(yīng)該對(duì)其他的對(duì)象有最少的了解。
即 一個(gè)類應(yīng)該對(duì)自己需要耦合或調(diào)用的類知道得最少骏令。四層含義:
1.只與直接的朋友交流
2.朋友間也是有距離的
3.是自己的就是自己的
4.謹(jǐn)慎使用Serializable寫法:編寫時(shí) 反復(fù)斟酌:
1.是否可以減少public的方法和屬性
2.是否可以加上private蔬捷、protected、package-private
3.是否可以加上final(防止被繼承)
6. 開閉原則:OCP
原話:Software entities like classes,modules and functions should be open for extendsion but closed for modifications.
直譯:軟件實(shí)體應(yīng)該對(duì)擴(kuò)展開放伏社,對(duì)修改關(guān)閉抠刺。
實(shí)體包括:邏輯模塊塔淤、抽象和類、方法
定義:開閉原則是對(duì)前5個(gè)原則的總結(jié)速妖,前五個(gè)原則對(duì)開閉原則的具體解釋高蜂。
寫法:
1.抽象約束
2.元數(shù)據(jù)(配置參數(shù),來(lái)源于數(shù)據(jù)庫(kù)罕容、本地文件)控制子模塊
3.指定項(xiàng)目章程
4.封裝變化好處:
1.減少測(cè)試壓力
2.提高代碼復(fù)用性
3.提高項(xiàng)目可維護(hù)性
4.面向?qū)ο箝_發(fā)的要求
開閉原則是項(xiàng)目的最終目標(biāo)备恤,不可能百分百做到,但朝著這個(gè)方向努力锦秒,可以改善架構(gòu)露泊,永遠(yuǎn)擁抱‘變化”,百變我不怕旅择。
作為一名 95后 程序員小白惭笑,
第一次投稿還是有點(diǎn)緊張呢。生真。
如果哪里有異議沉噩,希望各位大神指出,我修改柱蟀。
哈哈哈