天天看點

讀書筆記-設計模式原則

這段時間通過《大話設計模式》 這本書對面向對象設計,設計模式有了基本的認識, 尤其是書中的案例由淺入深,讓設計模式更加易于了解。為此整理了讀書筆記,以增加對書中内容了了解。

本文主要介紹書中提到的設計模式原則,設計模式有以下幾個原則:

  1. 單一職責原則
  2. 封閉-開放原則
  3. 依賴倒轉原則
  4. 裡氏代換原則
  5. 迪米特法則
  6. 合成/聚合複用原則

單一職責原則

單一職責原則:一個類應該僅有一個引起它變化的原因。

顧名思義在設計過程中,一個類應該僅負責一件事情。

一是如果一個類負責的事情過多會導緻類太臃腫,難以維護;第二,負責的事情太多,那麼引起該類變化的原因也會增多,這會導緻該類頻繁的修改。

封閉-開放原則

封閉-開放原則:軟體實體(類,子產品,函數等)應該可以擴充,但是不可修改。

換句話說,就是設計的類,對擴充開放,對修改關閉。

當然,需求總是會變動的,我們一開始也不可能考慮到全部的情況,這一原則指導在設計的類或者方法時,要友好的支援擴充,更好的複用已有的設計,而不是一旦有了變動隻能修改原來的設計。

依賴倒轉原則

依賴倒轉原則:(1) 高層子產品不應該依賴低層子產品,兩個都應該依賴抽象。 (2) 抽象不應該依賴細節,細節應該依賴抽象。

對于第一點,我的了解是,高層子產品要使用底層子產品的功能,但不是直接在高層子產品加載低層子產品,這樣會導緻兩個子產品耦合在一起,而應該在高層和低層之間加入抽象(接口),這樣當低層發生變化時,高層子產品是無感覺的。

對于第二點,我的了解是,應該根據抽象的功能或類,實作相關細節,讓細節來依賴抽象。抽象的功能不關注具體細節是如何處理和實作的。

裡氏代換原則

裡氏代換原則:子類型必須能夠替換掉他們的父類型。

隻有當子類可以替換掉父類,父類才能真正被複用,而子類也可以在父類的基礎上增加新行為。

我們使用類時,一般直接使用父類型。當傳入具體的子類型時,多态可以幫助我們對于具體類型的擷取。

迪米特法則

迪米特法則(LoD):最小知識原則。如果兩個類不必彼此直接通信,那麼兩個類就不應當發生直接的互相引用。如果需要調用,通過第三方轉發這個調用。

迪米特法則根本思想是降低類和類之間的耦合。有利于複用,易維護。

合成/聚合複用原則

合成/聚合複用原則:盡量使用合成/聚合,盡量不要使用繼承。

合成:一種”強”擁有關系,嚴格展現了整體和部分,生命周期一緻。如:大雁和翅膀

聚合:一種”弱”擁有關系,展現A對象可以包含B,但是B不是A的一部分。如: 雁群和大雁

優先使用合成/聚合進行類的封裝,使用繼承時必須時is_a的關系。

總結

本文介紹了設計模式的幾個原則, 作為我們進行類、函數等設計時的指導。針對具體情況具體分析,設計出可維護,可擴充,可複用,靈活性好的面向對象的結構,但是也不要過分設計,不要為代碼添加基于猜測,實際不需要的功能。

參考文獻

大話設計模式 - 程傑 著

繼續閱讀