23种设计模式C++源码与UML实现--策略模式
策略模式
Strategy模式也叫策略模式,是行為模式之一,它對(duì)一系列的算法加以封裝,為所有算法定義一個(gè)抽象算法接口,并通過(guò)繼承該抽象算法接口對(duì)所有的算法加以封裝和實(shí)現(xiàn),具體的算法選擇交給客戶端決定。strategy模式主要用來(lái)平滑地處理算法切換。
策略模式實(shí)現(xiàn)的關(guān)鍵就是將算法的邏輯抽象接口封裝到一個(gè)類(lèi)中,在通過(guò)委托的方式將具體的算法實(shí)現(xiàn)委托給具體的Strategy類(lèi)來(lái)實(shí)現(xiàn)
Strategy
策略(算法)抽象
ConcreteStrategy
各種策略(算法)的具體實(shí)現(xiàn)
Context
策略的外部封裝類(lèi),或者說(shuō)策略的容器類(lèi)。根據(jù)不同策略執(zhí)行不同的行為。策略由外部環(huán)境決定。
適用于:準(zhǔn)備一組算法,并將每一個(gè)算法都封裝起來(lái),使得它們可以互換。
策略模式優(yōu)缺點(diǎn)
它的優(yōu)點(diǎn)有:
恰當(dāng)使用繼承可以把公共的代碼移到父類(lèi)里面,從而避免重復(fù)的代碼。
策略模式,那么使用算法或行為的環(huán)境類(lèi)就可能會(huì)有一些子類(lèi),每一個(gè)子類(lèi)提供一個(gè)不同
的算法或行為。但是,這樣一來(lái)算法或行為的使用者就和算法或行為本身混在一起。決定
使用哪一種算法或采取哪一種行為的邏輯就和算法或行為的邏輯混合在一起,從而不可能
再獨(dú)立演化。繼承使得動(dòng)態(tài)改變算法或行為變得不可能。
種算法或采取哪一種行為的邏輯與算法或行為的邏輯混合在一起,統(tǒng)統(tǒng)列在一個(gè)多重轉(zhuǎn)移
語(yǔ)句里面,比使用繼承的辦法還要原始和落后。
策略模式的缺點(diǎn)有:
客戶端必須知道所有的策略類(lèi),并自行決定使用哪一個(gè)策略類(lèi)。這就意味著客戶端必須
理解這些算法的區(qū)別,以便適時(shí)選擇恰當(dāng)?shù)乃惴?lèi)。換言之,策略模式只適用于客戶端知
道所有的算法或行為的情況。
策略模式造成很多的策略類(lèi)。有時(shí)候可以通過(guò)把依賴于環(huán)境的狀態(tài)保存到客戶端里面,
而將策略類(lèi)設(shè)計(jì)成可共享的,這樣策略類(lèi)實(shí)例可以被不同客戶端使用。換言之,可以使用
享元模式來(lái)減少對(duì)象的數(shù)量
總結(jié)
以上是生活随笔為你收集整理的23种设计模式C++源码与UML实现--策略模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【计算机网络】TCP报文段结构
- 下一篇: 【软件体系结构】软件体系结构复杂性