從許多優秀的軟體系統中總結出成功的可復用的設計方案了解反模式
反模式就是從某些軟體系統中總結出來的不好的設計方案,反模式就是告訴你如何採用乙個不好的方案解決乙個問題。這些不好的方案表面上往往有很強的吸引力,人們一眼很難發現它的弊端,因此,發現反模式也是乙個很有意義的事情。對學習設計模式很有幫助。框架與設計模式
設計模式是為了讓程式具有更好的抽象類和介面:
介面是一種輻射式設計,介面進行了改變,所有實現這個介面的類都必須進行相應的改動。
對擴充套件開放,對修改關閉方法復用最常用的兩種方式:物件組合和類繼承。
繼承和復用的比較
高內聚
源於化學中的分子間的作用力,作用力強,則表現為內聚程度高。低耦合系統a、b互動,修改了a,不影響b,那麼認為a有足夠的內聚,a-b有足夠的低耦合。
電器與插座之間的關係就是低耦合。對類來說,乙個類應該只負責一項職責 類中方法少,可以在類中新增其他方法,來實現多功能, 如果通過分解類來實現單一職責,那麼改動會很大,需要靈活使用
乙個類對另乙個類的依賴,應該建立在最小的介面,不需要實現它不需要的介面方法。
依賴抽象,中心思想就是面向介面程式設計,抽象指的是介面或抽象類,使用介面和抽象類的目的是制定好規範。
// email是乙個類,如果入參用類的話,當有其他型別的類需要使用時,需要增加新的方法
class person
}
依賴關係傳遞
inte***ce a
inte***ce b
class c implements a
}
注意事項及細節
繼承是實現復用的一種方式,但是使用繼承需要注意以下的點,也就是要遵循黎克特制替換原則,其是對繼承的一種約束。通俗的講就是:子類可以擴充套件父類的功能,但不能改變父類原有的功能
繼承的弊端:當父類修改時,要考慮到子類將要引起的變化。
遵循黎克特制替換原則,子類盡量不要重寫父類的方法,如果乙個類重寫了父類的方法過多,可以進一步抽象提取公共部分,通過依賴、組合、聚合的方式降低耦合性。該原則要求:
a. 子類必須實現父類的抽象方法,但不得重寫父類的非抽象方法
b. 子類可以增加自己特有的方法
c. 當子類覆蓋父類方法時, 方法的前置條件(方法的形參)要比父類的輸入引數更寬鬆(因為寬鬆,所以入參匹配是,仍匹配到的是父類的方法,避免了實現錯亂)
d. 當子類覆蓋父類方法時,方法的後置條件(方法的返回值) 要比父類更嚴格。(因為子類返回值範圍被父類大,會編譯錯誤)
對擴充套件開放,對修改關閉,上面的原則基本都是為了實現這個原則,使用設計模式就是遵循開閉原則。
最少知道原則, 乙個物件應對其他物件保持最少的了解。(只與直接朋友通訊)
盡量使用合成/聚合,而不是繼承。
設計模式 設計模式原則
1 單一職責原則 srp 乙個類應當只有乙個引起其變化的原因。使用單一職責原則的好處有 1 類的複雜性降低 2 可讀性提高 3 可維護性提高 4 變更引起的風險降低 2 黎克特制替換原則 lsp 在使用父類的地方,可以使用其子類替換。黎克特制替換原則的含義 1 子類必須完全實現父類的方法 2 子類可...
設計模式 設計原則
1.單一職責原則 single responsibility principle,簡稱srp 就乙個類而言,應該僅有乙個引起它變化的原因。如果乙個類承擔的職責過多,就等於把這些職責耦合在一起,乙個職責的變化可能會削弱或抑制這個類完成其他職責的能力。這種耦合會導致脆弱的設計,當變化發生時,設計會遭受到...
設計模式 設計原則
description 這是本人學習 設計模式之禪 的筆記 設計原則 一 單一職責 應該有且僅有乙個原因讓乙個類發生變更。這個原則目的是要讓介面的職責分明,結構清晰。優點 類的複雜度降低,可讀性提高,變更風險低,可維護性提高。二 黎克特制替換 通俗一點就是父類存在的地方,可以替換為子類,而程式的行為...