剛剛結束設計模式學習時,感覺哪哪的抓不住重點,雖然之前師傅給勾了寫比較重要的設計模式,但是給我的感覺設計模式怎麼全都乙個樣子。
通過對一些文章的瀏覽,簡單的對設計原則總結了一下。
設計模式,就是設計範例。
是經典問題的解決方案,是可以讓學習者舉一反三的,有研究價值、有交流價值的例子。
設計模式的本質是物件導向方法的實際運用。
具體而言,是封裝、繼承、多型和關聯的反覆使用。其中核心是封裝的概念。
設計模式還是很重要的,但是在這裡我不想多提,對於設計模式學習,我也只是剛剛開始,對於每個設計模式掌握的也並不是很好,只能照本宣科,並不能有什麼自己的東西。
下面簡單說一下設計模式的六大設計原則
(以下排名不分先後 ^o^ )
單一職責原則
問題出現:乙個類負責多個事務,當有乙個事務有變動時,可能會影響其他事務不能正常執行。
解決方法:由此就有了單一職責原則,乙個類只幹一件事。
乍一聽還是非常簡單的,但是因為職責擴撒的存在,有些時候並不能很好的遵循。
什麼是職責擴散,就是因為某些原因乙個職責被細分為兩個或多個職責。
對於原則的使用還是有個度,對於這個度的還是要自己把控,只要邏輯的複雜度自己能夠把控就好了。
優點:1.可以降低類的複雜度,乙個類只負責乙個職責,其邏輯肯定比負責多項職責簡單的多
2.提高類的可讀性,提高系統的可維護性
3.變更引起的風險降低
黎克特制替換原則
這一原則我還是似懂非懂,即使看了多篇文章,但是用字遣詞都不太理解,耐人尋味,最後我只能留下他們,等待後續的解答
黎克特制替換原則的4層含義:
1.子類可以實現父類的抽象方法,但不能覆蓋父類的抽象方法。
2.子類可以增加自己特有的方法
3.當子類的方法過載父類的方法時,方法的前置條件(方法的形參)要比父類方法的輸入引數更寬鬆
4.當子類的方法實現父類的抽象方法時,方法的後置條件(方法的返回值)要比父類更嚴格
依賴倒轉原則
高層模組不應該依賴底層模組,二者都應該依賴抽象;抽象不應該依賴細節,細節應該依賴抽象。
看了些資料,例子或者定義也寫了一大堆,最容易讓我理解的還是《大話》中寫到的,記憶體條cup都不應該依賴於主機板,都應依賴於介面這個抽象。
在實際程式設計中應做到:
1.底層模組盡量都要有抽象類或者介面,或者兩者都有。
2.變數的生命型別盡量是抽象類或介面。
3.使用繼承時遵循黎克特制替換原則。
依賴倒轉原則的核心就是我們面向介面程式設計。
介面隔離原則
客戶端不應該依賴他不需要的介面,乙個類對另乙個類的依賴應該建立在最小的介面上。
簡單的理解,就是乙個類通過乙個介面來實現另乙個類,但是介面中有一些方法是不需要的,這不是畫蛇添足麼。
下面看兩個不用多說什麼就了解了
在使用介面隔離原則時應注意:
1.介面盡量小,但要有限度。對介面進行細化可以提高程式靈活性,但是事如果過小,則會造成介面數量過多,是設計複雜化。
2.為依賴介面的類定**務,只暴露給呼叫它的類所需要的方法,不需要的方法則隱藏起來。只有專注的為乙個模組提供定**務,才能建立最小的依賴關係。
3.提高內聚,減少對外互動。使用介面最少的方法完成最多的事情。
迪公尺特法則
乙個物件應該對其他物件保持最少的了解。
迪公尺特法則的根本思想就是強調類之間的松耦合。
看過了《大話》也讀了例子,還是不能像上面的原則一樣,說在使用時應注意些什麼,我只能說,注意類之間的松耦合。
開放-封閉原則
軟體實體(類、模組、函式等)應該可擴充套件,但是不可修改。
剛開始我還不是很能理解的,直到我看到了:對程式的改動是通過增加新**進行的,而不是更改現有的**。
總結
最後說一下如何遵守六個原則。對於這六個原則遵守時不是是和否的問題,而是多和少的關係。就是平時我們說的時候不會說,有沒有遵循,而是說 遵循的程度。
下面我們看兩幅圖
圖中的每一條緯度代表一項原則,我們依據對這項原則的遵守在緯度上面畫乙個點,則如果對這項原則遵守的合理的話,這個點應該落在紅色的同心圓內部;如果遵守的差,點將會在小圓內部;如果遵循過度,點將會落在大圓外部。乙個良好的設計體現在途中,應該是六個頂點都在同心圓中的六邊形。
在上圖中,設計1、 2屬於良好的設計,設計3、 4雖然有些不足,但也基本可以接受,設計5、 6則嚴重不足。
主要參考文章
設計模式 六大設計原則
solid s 單一職責原則 o 開放封閉原則 l 黎克特制代換原則 i 介面隔離原則 d 依賴倒轉原則 故事 手機拍攝ufo 定義 就乙個類而言,應該僅有乙個引起它變化的原因。通俗講就是我們不要讓乙個類承擔過多的職責。如果乙個類承擔的職責過多,就等於把這些職責耦合在一起,乙個職責的變化可能會削弱或...
設計模式的六大設計原則
1 單一指責原則 single responsibility principle,srp 每個類的功能單一,不能多功能 2 黎克特制替換原則 liskov substitution principle lsp,lsp 1.子類必須完全實現父類的方法 2.子類可以有自己的個性 3.覆蓋或實現父類的方法...
設計模式 六大設計原則總結
六大設計原則 solid 包括 單一職責原則,黎克特制替換原則,依賴倒置原則,介面隔離原則,迪公尺特法則,開閉原則。設計模式的乙個重點是面向介面程式設計,設計具有低耦合度的模組,使各個模組功能分明。在六大設計原則中,很多方面都體現了這些內容。在程式設計時,遵循這些點可以使 更容易讀和擴充套件,使 易...