設計模式《五》策略模式

2021-08-14 06:31:20 字數 1734 閱讀 5677

設計模式概述見:

它定義了演算法家族,分別封裝起來,讓它們之間可以互相替換,此模式讓演算法的變化,不會影響到使用演算法的客戶。

意思就是演算法只是一種策略,而策略之間是可以相互替換的,替換之後也不會影響到使用這些演算法的客戶端。

策略模式被運用在演算法的互換上,例如加減乘數是一系列的演算法,給定兩個數,對其中具體的演算法可以隨便進行替換而不會影響客戶端的執行。

又比如出行方式的選擇上,走路,自行車,騎車,飛機,關注的是出行,怎麼出行就是一系列可替換的選擇。

策略模式的應用場景如下:

一為系統需要在不同的行為上進行替換;

二為系統的某一功能需要有多種方式進行實現;

三為封裝複雜的演算法類,使客戶端盡可能少知道細節;

四為替代那些複雜的if…else… 、switch語句。

策略模式和簡單工廠模式有一定程度上的相似。

它的基本思想與呼叫與簡單工廠模式也極易混淆。其中的區別我記在了後記之中。

策略模式實現了對具體策略之間的互換,客戶端知道乙個行為可以產生怎樣的結果,而這個行為是怎樣的就通過傳入具體的策略來實現。

以之前相同的演算法來實現如下:

首先,需要有乙個抽象的策略進行行為的封裝:

/**

*@author : cjd

*@description :策略介面

*@create : 2018-01-02 10:40

**/public

inte***ce

strategy

乙個具體的加法策略與減法策略:

class

addstrategy

implements

strategy

}class

reducestrategy

implements

strategy

}

以及乙個環境類來呼叫具體的策略

/**

*@author : cjd

*@description :環境類

*@create : 2018-01-02 10:45

**/public

class

calccontest

public

intgetresult(int a, int b)

}

客戶端是這樣對策略進行呼叫的:

public

class main

}

客戶端關注的是getresult()的行為,需要知道的是需要實施的具體策略new addstrategy()。我們將具體的演算法封裝進了環境類的getresult();暴露給客戶端的是環境類的物件.

它與簡單工廠模式的差異在:

工廠模式是一種建立型模式,建立型模式關注的是對物件的建立。

而策略模式是一種行為模式,策略模式更關注於對演算法的封裝與互換。

在使用策略模式時,需要知道每乙個具體策略是什麼,也因為這樣的使用方法在一定了上會增加客戶端的使用難度,所以實際情況上會將其與簡單工廠模式或其他模式進行整合使用。

工廠模式封裝的是物件,需要知道具體的方法來具體實現。

策略模式封裝的是行為,需要知道具體的策略來實現。

若有理解錯誤,感謝指出!

設計模式之五 策略模式

原文 設計模式之五 策略模式 前言策略模式 它定義了演算法家族,分別封裝起來,讓它們之間可以相互替換,此模式讓演算法的變化,不會影響到使用演算法的客戶。策略模式結構圖 strategy 策略類,定義所有支援的演算法的公共介面 concretestrategy1,concretestrategy2,c...

設計模式 策略設計模式

策略設計模式其實就是多型的使用,父類引用指向子類物件。策略模式的最大特點是使得演算法可以在不影響客戶端的情況下發生變化,從而改變不同的功能。策略模式的缺點其實也很明顯,在於策略模式把每一種具體的策略都封裝成乙個實現類,如果策略有很多的話,很顯然是實現類就會導致過多,顯得臃腫。案列 author de...

五 策略模式

策略模式 與工廠不同的是,工廠是 工廠類接受引數,例項化具體的類,返回類 策略模式是 接受具體的例項化類,僅將方法賦予策略類 策略模式類 class cashcontext private cashsuper cs public cashcontext cashsuper csuper this.c...