Head First 之策略模式筆記

2021-09-30 15:21:30 字數 977 閱讀 6419

通過繼承在父類中提供行為,會導致以下缺點:

a.**在多個子類中重複;b.

執行時的行為不容易改變;

c.改變會牽一發動全身,造成部分子型別不想要的改變;

策略模式(strategypattern)體現了兩個非常基本的物件導向設計的原則:

1、把會變化的內容取出並封裝起來,以便以後可以輕易地改動或擴充部分,而不影響不需要變化的其他部分,而不變的部分採用繼承來實現;

2、程式設計中使用介面,而不是對介面的實現。

策略模式定義了乙個共同的抽象演算法介面,其子類實現這個介面定義的方法,並且都有各自不同的實現,這些演算法實現可以在客戶端呼叫它們的時候互不影響的變化。子演算法之間是弱連線的關係,提高了軟體的可擴充套件性與可重用性。

策略模式組成

1、抽象策略角色:策略類,通常由乙個介面或者抽象類實現

3、環境角色:持有乙個策略類的引用,最終給客戶端呼叫的。

策略模式編寫步驟

1、對一組演算法抽象出乙個共同介面,定義這個共同介面

2、編寫策略類,實現這個藉口,每個策略類都有其獨特的實現

3、編寫環境角色類,類中持有乙個對共同介面的引用,對策略物件注入如set方法和get方法或者用構造方法完成賦值

以上就是策略模式的實現三步曲。接下來,讓我們透過步驟看本質:1)

初始,我們通過繼承實現行為的重用,導致了**的維護問題。

->

繼承,isa

2)接著,我們將行為剝離成單獨的型別並宣告為不變內容的例項變數並通過

->

組合,hasa

setter

方法以裝配關係;

繼承,可以實現靜態**的復用;組合,可以實現**的彈性維護;使用組合代替繼承,可以使**更好地適應軟體開發完後的需求變化。

策略模式的本質:少用繼承,多用組合

下面就是實現的類圖:

Head First設計模式之工廠模式

定義了乙個建立物件的介面,但由子類決定要例項化的類是哪乙個.工廠方法讓類把例項化推遲到子類 1 抽象工廠角色 這是工廠方法模式的核心,它與應用程式無關。是具體工廠角色必須實現的介面或者必須繼承的父類。2 具體工廠角色 它含有和具體業務邏輯有關的 由應用程式呼叫以建立對應的具體產品的物件。3 抽象產品...

《Head First設計模式》之命令模式

命令模式就是將方法呼叫 method invocation 封裝起來。通過封裝方法呼叫,我們可以把運算塊包裝成形,所以呼叫此運算的物件不需要關心事情是如何進行的,只要知道如何使用包裝成形的方法來完成它就可以了。通過封裝方法呼叫,可以用在以下場景 記錄日誌或者重複使用這些封裝來實現撤銷 undo 我對...

Head First設計模式之組合模式

將物件組合成樹形結構來表現 整體 部分 層次結構。組合能讓客戶以一致的方法處理個別物件以及組合物件。主要部分可以被一致對待問題.組合模式主要包含三個角色 2.composite 容器構件 容器節點包含子節點,其子節點可以是葉子節點,也可以是容器節點,它提供乙個集合用於儲存子節點,實現了在抽象構件中定...