策略模式 Strategy Pattern

2021-08-30 07:45:32 字數 1237 閱讀 2185

策略模式是對演算法的包裝,把使用演算法的責任和演算法本身分隔開,委派給不同的物件管理。策略模式通常把一系列的演算法包裝到一系列的策略類裡面,作為乙個抽象策略類的子類。

何時使用策略模式:

1) 如果在乙個系統裡面有許多類,它們之間的區別僅在於它們的行為,那麼使用策略模式可以動態的讓乙個物件在許多行為中選擇一種行為。

2) 如果系統需要動態地在幾種演算法中選擇一種。那麼這些演算法可以包裝到乙個個的具體演算法類裡面,而這些演算法類都是乙個抽象演算法類的子類。換言之,這些具體演算法類均有統一的介面,由於多型性原則。客戶端可以選擇使用任何乙個具體演算法類,並只持有乙個資料型別是抽象演算法類的物件。

3) 乙個系統的演算法使用的資料不可以讓客戶端知道。策略模式可以避免讓客戶端涉及到不必要接觸到的**的和只與演算法有關的資料。

4) 假設這樣乙個案例:假設現在要設計乙個販賣各類書籍的電子商務**的購物車系統。如果要計算購物車的貨品的**,乙個最簡單的情況就是把所有貨品的單價乘上數量,但是實際情況肯定比這要複雜。比如,教材類圖書每本一元折扣,***類圖書每本7%的折扣,非教材類計算機圖書3%折扣,其餘沒有折扣。這個**計算問題就可以由策略模式來解決。

[size=large][b]類圖:[/b][/size]

[img]

[size=large][b]源**:[/b][/size]

public inte***ce strategy

public class concretestrategya implements strategy 

}public class concretestrategyb implements strategy

}

public class context         

public void doaction()

}

public class client 

}

策略模式的缺點:

1) 客戶端必須知道所有的策略類,並自行決定使用哪乙個策略類,這就意味著客戶端必須

理解這些演算法的區別,以便適時選擇恰當的演算法類。換言之,策略模式只適用於客戶端知道所有的演算法或行為的情況。

2)策略模式造成許多的策略類。有時候可以通過把依賴於環境的狀態儲存到客戶端裡面,而將策略類設計成可共享的,這樣策略類例項可以被不同客戶端使用。換言之,可以使用享元模式來減少物件的數量。

模式 策略模式

前言 所有的設計模式都是基於程式設計屆前輩們的不斷實踐得出的解決一類問題中比較有效高效的程式設計方法。策略模式 策略模式用於解決業務中不同場景下統一行為的細微差別問題。策略模式遵循 開閉原則 舉個例子來說,在購物車功能中,結算 的時候會根據使用者的不同級別去打折,那麼打折計算 的這一行為就會有不同演...

策略模式(策略列舉)

首先定義乙個介面 package com.yecc.suanfa.strategy created by yecc on 2020 11 16 19 35 public inte ce strategy 定義三個繼承介面的類 package com.yecc.suanfa.strategy crea...

策略模式及Spring整合策略模式

抽象策略類 inte ce sortservice 具體策略類 class insertionsortserviceimpl implements sortservice else arr j 1 tmp return arr 氣泡排序 class bubblesortserviceimpl imp...