java 設計模式 學習筆記(4) 策略模式

2021-08-25 19:10:30 字數 1388 閱讀 4901

策略模式是一種定義一系列演算法的方法,從概念上來看,所有的這些方法完成的都是相同的工作,只是實現不同。

它可以以相同的方式呼叫所有演算法,減少了各種演算法類和使用演算法的類之間的耦合。

為什麼要使用策略模式中的context 類?

對於前面的三種工廠設計模式,如果用工廠來建立例項,並通過例項呼叫給例項類中的方法來實現功能。而使用了context類,通過將 具體的演算法類 注入到context 建構函式中,並在context 自身的函式中來呼叫 注入到建構函式中的 具體演算法類的特定方法。也就是說,使用者**只是選擇了乙個具體的演算法類並注入到 context 物件中,然後通過操作 context 類,來實現需要的功能,避免了使用者**直接操作 具體的演算法類。

1. 定義乙個 strategy 介面,該介面為context 定義了乙個calculate() 方法,並交給其實現類來具體實現。

public inte***ce strategy

2. 建立乙個實現strategy 介面的addstrategy 類,實現calculate 方法,返回 numa和numb 的和值

public class addstrategy implements strategy }

3. 再建立乙個實現strategy 介面的multistrategy類,實現calculate 方法,返回 numa和numb 的乘積。

public class multistrategy implements strategy }

4. 建立乙個 context 類 ,該類用來儲存 strategy 實現類的引用,並在自己的方法中呼叫 實現類的calculate 方法,

public class context public int getresult(int numa, int numb) }

5. 建立乙個teststrategy 類,來驗證實驗結果

public class teststrategy }

輸出結果為 :

addstrategy result : 9

multistrategy result : 20

從實驗驗證過程中可以看到傳給了 context 不同的strategy 實現類,最後輸出的結果就不同。但是我們知道,對numa 和numb 做的表示式發生在 strategy 類中,因此,我們可以得出 由於context 類得存在對 使用者隱藏了運算細節,等於說context 在 strategy 實現類的外面又包了一層。

「策略模式還有乙個優點 是 簡化了 但單元測試, 因為每個演算法都有自己的類,可以通過自己的介面單獨測試 」 從addstrategy 的**中,我們確實可以看到,這個類包含了乙個calculate() 方法,因此,可以在單元測試裡,直接

new addstrategy().calculate(3,4) 並觀察結果來判斷該類的實現是否正確。

Java設計模式學習 策略模式

寫在前面的話 離畢業己經三個多月了,從實習到現在來公司己經快一年了,之前學習的好多東西正因為沒有在現在的專案中體現,怕自己會忘記所有找了些資料重新衝一下電。記得老師曾經說過,把自己學習的知識,寫在部落格裡,這樣方便他人借鑑的同時,自己以後再想回過頭來看也方便,故從現在開始每學習乙個知識點,就記錄一篇...

設計模式學習筆記 策略模式

我覺得策略模式與工廠方法模式極其相似!策略模式 工廠方法模式 如果單從圖來看,看不出有何相似之處。但看看呼叫方法就知道了 策略模式 context context new context abstractstrategy strategy 採用哪種策略,由呼叫方決定 strategy new con...

設計模式學習筆記 策略模式

問題 商場收銀軟體,根據單價和數量,得到總價。設計思路 兩個輸入框,分別代表單價和數量,乙個下拉框,選項有 正常,打折,滿減等演算法 商場有時需要正常收費,有時打折扣,有時滿300送100.下面是簡單工廠模式下 所有演算法的父類抽象類cashsuper public abstract class c...