設計模式:物件導向語言開發過程中,遇到種種的場景和問題,提出的解決問題的思路。設計模式是解決具體問題的套路。
目錄
1.單一職責原則:
2.黎克特制替換原則:
3.迪公尺特法則:
定義:類t負責兩個不同的職責:職責p1,職責p2。當由於p1需求發生改變而需要修改類t時,有可能會導致原本執行正常的職責p2發生故障。
方法級別的單一職責原則:乙個方法只負責一件事情(不同職責分拆成多個方法,分支邏輯拆分);
類級別的單一職責原則:乙個類只負責一件事情;
類庫級別的單一職責原則:乙個類庫應該職責清晰;
專案級別的單一職責原則:乙個專案應該職責清晰(客戶端、管理後台、後台服務、定時任務、分布式引擎);
單一職責原則的優點:
1.降低**的複雜度,乙個類(方法、類庫、專案、系統)負責乙個事情,邏輯簡單。
2.**的可讀性高,易維護。
單一職責原則的缺點:
1.**拆分多了,**量會增加。
2.類多了,方法多了,使用(理解)成本增高。
單一職責原則的使用:
如果型別足夠簡單,方法少,可以在類級別去違背單一職責;如果型別複雜,方法多,建議遵循單一職責原則;
定義:任何使用基類的地方,都可以透明的使用其子類。
黎克特制替換原則實質是指導應該更好的使用繼承。
1.父類裡面的一些方法屬性,子類中沒有,那麼子類就不應該再繼承父類。
2.子類可以實現父類的抽象方法,但是父類不能覆蓋父類的非抽象方法。
父類中凡是已經實現好的方法,實際上是在設計一系列的規範和契約,雖然它不強制要求所有的子類必須遵從這些規範,但是如果子類對這些非抽象方法任意修改,就會對整個繼承體系造成破壞。
看下面乙個例項:有乙個動物的抽象類,抽象類中定義動物可以吃飯和睡覺。有乙個狗類繼承動物類,並實現其父類的抽象方法。
執行結果:
上面的例項是正常的父子繼承情況,如果要在子類中覆蓋父類的非抽象方法,dog類要覆蓋baseanimal的sleep方法,如下圖:
這樣的話,執行結果就變了:
這種情況就違背了黎克特制替換原則,要麼dog類不要再繼承baseanimal,要麼dog類就不要覆蓋父類的sleep方法。
子類覆蓋父類的非抽象方法,語法當然是沒有問題的。只是從設計上不推薦這樣用。
迪公尺特法則也叫最少知道原則,乙個軟體實體應當盡可能少地與其他實體發生相互作用。
很形象的一句話是只與最直接的朋友通訊。
例項:明星與經紀人的關係。
明星由於全身心投入藝術,所以許多日常事務由經紀人負責處理,如與粉絲的見面會,與**公司的業務洽淡等。這裡的經紀人是明星的朋友,而粉絲和**公司是陌生人,所以適合使用迪公尺特法則。
經理人類:
粉絲類:
公司類:
明星類:
程式呼叫:
執行結果:
迪公尺特法則在具體程式中的應用:
1.儘量減少內部依賴。
2.降低訪問修飾符,只暴露應該暴露的方法或者屬性。
private、protected、internal、public 的使用
設計模式詳細講解參加:
設計模式六大原則
0.05 設計模式 設計模式 規範 筆記 大話設計模式 物件導向的關鍵在於封裝,封裝好了才能很好的復用,達到單一職責和開放擴充套件 封閉更改的效果。1 單一職責原則 就乙個類而言,應該僅有乙個引起它變化的原因.增加功能不應該修改已有的 避免修改出錯及重複測試.如果你能夠想到多於乙個的動機去改變乙個類...
設計模式六大原則
0.05 設計模式 設計模式 規範 筆記 大話設計模式 物件導向的關鍵在於封裝,封裝好了才能很好的復用,達到單一職責和開放擴充套件 封閉更改的效果。1 單一職責原則 就乙個類而言,應該僅有乙個引起它變化的原因.增加功能不應該修改已有的 避免修改出錯及重複測試.如果你能夠想到多於乙個的動機去改變乙個類...
設計模式六大原則
參考文章 單一職責原則 single responsibility principle,srp 乙個類只負責乙個功能領域中的相應職責,或者可以定義為 就乙個類而言,應該只有乙個引起它變化的原因。開閉原則 open closed principle,ocp 乙個軟體實體應當對擴充套件開放,對修改關閉。...