軟件設計模式(原則)

類圖以及類圖之間的關係

  • 類的特性:封裝,繼承,多態。
  • “可見性”表示該屬性對類外的元素是否可見,包括公有(Public)、私有(Private)、受保護(Protected)和朋友(Friendly)4 種,在類圖中分別用符號+、-、#、~表示。
  • 類圖 : 顯示系統中的類,接口,協作以及他們之間的關係和靜態結構的一種靜態模型,描述軟件系統的結構化設計,事系統分析與設計階段的重要產物。
  • 依賴關係:對象之間的臨時關聯關係,某個類的方法通過局部變量,方法的參數或者對靜態方法的調用來訪問另一個類的某些方法完成任務。
  • 關聯 :對象之間的引用關係,表示一類對象與另一類對象之間的聯繫(如師生關係)
  • 聚合關係 :整體與部分之間的關係,has-a關係。成員對象是整體對象的一部分,但是成員對象可以獨立於整體對象而存在。(如大學和老師的關係,學校停辦,老師依舊存在)
  • 組合關係 : 更強烈的整體與局部之間的關係,是cxmtains -a關係,整體對象控制着部分對象的生命週期,一旦整體對象不存在了,部分對象隨之消失。(如頭與嘴巴)
  • 泛化關係:對象之間的耦合度最大的關係,是父子關係(繼承關係)
  • 實現關係:接口與實現類之間的關係,類實現了接口並實現了其中所有的抽象方法。

開閉原則

軟件對外擴展開放,對修改關閉,當應用的需求改變時,在不修改軟件實體的源碼的前提下,可以擴展功能,滿足新需求,使得實體擁有一定的靈活性,穩定性和延續性。

  • 實現:抽象約束,封裝變化,通過接口或者抽象類爲軟件實體定義一個相對穩定的抽象層,將相同的可變因素封裝在相同的具體實現類中。
  • 特點:抽象的靈活性好,只要抽象合理,可以保持軟件架構基本不變,而軟件的易變的細節可以從抽象層的實現類來擴展,當軟件需要變化時,只需要根據需求重新派生一個實現類來擴展。
  • 例子:手機或者電腦的桌面主題:所有個性的主題的共有特性封裝在一個抽象類中,每個具體的主題實現抽象類增加自己的特性。

里氏替換原則

子類可以擴展父類的功能,但是不能改變父類原有的功能,克服繼承中的重寫父類造成的可複用性變差的缺點,子類繼承父類時,除了添加新的方法,儘量不要重寫父類的方法。

  • 如 正方體不是長方體,如果正方體要繼承長方體,需要重寫其中的方法。應向上封裝一個圖形類。

依賴倒置原則

核心:面向接口編程,不是面向實現編程。

  • 高層和底層模塊要依賴抽象,細節實現要依賴於抽象。細節多變而抽象層穩定,以抽象爲基礎建立的架構更穩定。
  • 使用抽象層(抽象類或接口)指定規範和契約,不涉及具體操作,實現類去實現抽象類的抽象方法,展現自己的細節。通過面向接口的編程降低類之間的耦合性。
  • 任何類不應在具體類鍾產生。

單一功能原則

一個類應該有且僅有一個變化因素,一個類負責一個職責,提高可讀性,提高可維護性,將對象解耦,提高內聚性。將類的不同職責分離,封裝到不同的類或者模塊中。

接口隔離原則

  • 將臃腫龐大的接口拆分成更小的和更具體的接口,爲每個類建立自己的專用接口,實現接口隔離,提高類的內聚性,降低耦合度,大小合理而保證系統穩定性,實現類可以使用相應的接口實現需要的方法。

迪米特法則

最少知識原則,只與直接朋友交談,不跟陌生人說活。即兩個軟件實體不需要直接通信的條件下,可以通過第三方轉發調用,可以降低類之間的耦合度,提高模塊的相對獨立性,從而提高了類的可複用率和系統的擴展性。

  • “朋友”是指:當前對象本身、當前對象的成員對象、當前對象所創建的對象、當前對象的方法參數等,這些對象同當前對象存在關聯、聚合或組合關係,可以直接訪問這些對象的方法。
  • 過度使用迪米特法則會使系統產生大量的中介類,從而增加系統的複雜性,使模塊之間的通信效率降低。所以,在釆用迪米特法則時需要反覆權衡,確保高內聚和低耦合的同時,保證系統的結構清晰。
    實現
  1. 從依賴者的角度來說,只依賴應該依賴的對象。
  2. 從被依賴者的角度說,只暴露應該暴露的方法。
    實例
    明星通過經紀人 與粉絲和經紀人溝通。

合成複用原則

又叫組合/聚合複用原則,它要求在軟件複用時,要儘量先使用組合或者聚合等關聯關係來實現,其次才考慮使用繼承關係來實現。
繼承複用

  1. 繼承複用破壞了類的封裝性。因爲繼承會將父類的實現細節暴露給子類,父類對子類是透明的,所以這種複用又稱爲“白箱”複用。
  2. 子類與父類的耦合度高。父類的實現的任何改變都會導致子類的實現發生變化,這不利於類的擴展與維護。
  3. 它限制了複用的靈活性。從父類繼承而來的實現是靜態的,在編譯時已經定義,所以在運行時不可能發生變化。

合成複用

  1. 它維持了類的封裝性。因爲成分對象的內部細節是新對象看不見的,所以這種複用又稱爲“黑箱”複用。
  2. 新舊類之間的耦合度低。這種複用所需的依賴較少,新對象存取成分對象的唯一方法是通過成分對象的接口。
  3. 複用的靈活性高。這種複用可以在運行時動態進行,新對象可以動態地引用與成分對象類型相同的對象。
  4. 合成複用原則是通過將已有的對象納入新對象中,作爲新對象的成員對象來實現的,新對象可以調用已有對象的功能,從而達到複用。
    騎車分類例子
    汽車按“動力源”劃分可分爲汽油汽車、電動汽車等;按“顏色”劃分可分爲白色汽車、黑色汽車和紅色汽車等。
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章