淺讀設計模式 - 1

WangQingye發表於2018-06-05

前言-基本概念

  • 設計模式並不使用獨特的語言特性,也不採用那些神奇的程式設計技巧。所有的模式均可以用標準的面嚮物件語言實現,這也許會多費一些功夫,但是增加了軟體的靈活性和可複用性。

  • 書中根據模式的性質將模式劃分為三類:建立型(creational)、結構型(structural)、行為型(behavioral)。 建立型模式與物件的建立有關;結構型模式處理類或物件的組合;行為型模式對類或物件怎樣互動和怎樣分配職責進行描述。

  • 多型:物件介面與其功能實現是分離的,不同物件可以對請求做不同的實現,也就是說,兩個有相同介面的物件可以有完全不同的實現。

  • 在物件導向系統中,介面是基本的組成部分,物件只有通過它們的介面才能與外部交流,如果不通過物件的介面就無法知道物件的任何事情,也無法請求物件做任何事情。

  • 理解物件的類和型別(抽象、具體、混入)之間的差別非常重要:一個物件的類定義了物件是怎樣實現的,同時也定義了物件的內部狀態和操作的實現。但是物件的型別只與它的介面有關,介面即物件能響應的請求的集合,一個物件可以有多個型別,不同類也可以有相同的型別。

  • 所有從抽象類匯出的類將共享該抽象類的介面,這時,所有的子類都能相應抽象類中的請求。只根據抽象類中定義的介面來操作物件有以下兩個好處: 1)客戶無須知道他們使用物件的特定型別,只須物件有客戶所期望的介面。 2)客戶無須知道他們使用的物件是用什麼類來實現的,他們只須知道定義介面的抽象類。 這樣可以極大地減少系統實現之間的相互依賴,也產生了可複用的面相物件設計的如下原則: 針對介面程式設計,而不是針對實現程式設計。

  • 混入類是給其他類提供可選擇的介面或功能的類,它與抽象類一樣不能例項化,都是用於繼承的,抽象類和混入類都是物件的型別。

  • 優先使用物件組合,而不是類繼承。 因為當需要複用子類時,實現上的依賴性就會產生一些問題。如果繼承下來的實現不適合解決新的問題,則父類必須重寫或被其他更適合的類替換。這種依賴關係限制了靈活性並最終限制了複用性。優先使用物件組合有助於保持每個類被封裝,並被集中在單個任務上;基於物件組合的設計有更多的物件(而有較少的類),且系統的行為將依賴於物件間的關係而不是被定義在某個類中。

  • 委託(在一個物件中引用另一個物件,以此來完成請求)是物件組合的特例。它告訴你物件組合作為一個程式碼複用機制可以替代繼承。

  • 設計問題對框架設計而言最具重要性。(相比應用和工具庫)一個使用設計模式的框架比不使用設計模式的框架更可能獲得高層次的設計複用和程式碼複用。成熟的框架通常使用了多種設計模式。瞭解設計模式的人能更快的洞悉框架。

相關文章