日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Strategy Pattern(策略模式)

發(fā)布時(shí)間:2025/3/21 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Strategy Pattern(策略模式) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

意圖

定義一系列的算法,把它們一個(gè)個(gè)封裝起來, 并且使它們可相互替換。本模式使得算法可獨(dú)立于使用它的客戶而變化。

適用性

1. 許多相關(guān)的類僅僅是行為有異。“策略”提供了一種用多個(gè)行為中的一個(gè)行為來配置一個(gè)類的方法。
2. 需要使用一個(gè)算法的不同變體。例如,你可能會(huì)定義一些反映不同的空間/時(shí)間權(quán)衡的算法。當(dāng)這些變體實(shí)現(xiàn)為一個(gè)算法的類層次時(shí),可以使用策略模式。
3. 算法使用客戶不應(yīng)該知道的數(shù)據(jù)。可使用策略模式以避免暴露復(fù)雜的、與算法相關(guān)的數(shù)據(jù)結(jié)構(gòu)。
4. 一個(gè)類定義了多種行為, 并且這些行為在這個(gè)類的操作中以多個(gè)條件語句的形式出現(xiàn)。將相關(guān)的條件分支移入它們各自的Strategy類中以代替這些條件語句。

結(jié)構(gòu)



參與者:
> Strategy(策略)?
— 定義所有支持的算法的公共接口。Context使用這個(gè)接口來調(diào)用某 ConcreteStrategy定 義的算法。?
> ConcreteStrategy(具體策略)?
— 以Strategy接口實(shí)現(xiàn)某具體算法。?
> Context(上下文)?
— 用一個(gè)ConcreteStrategy對(duì)象來配置。
— 維護(hù)一個(gè)對(duì)Strategy對(duì)象的引用。
— 可定義一個(gè)接口來讓Stategy訪問它的數(shù)據(jù)。?

例子



優(yōu)缺點(diǎn)

> 優(yōu)點(diǎn):
* 算法可以自由切換
這是策略模式本身定義的,只要實(shí)現(xiàn)抽象策略,它就成為策略家族的一個(gè)成員,通過封裝角色對(duì)其進(jìn)行封裝,保證對(duì)外提供“可自由切換”的策略。 ?
* 避免使用多重條件判斷
如果沒有策略模式,我們想想看會(huì)是什么樣子?一個(gè)策略家族有5個(gè)策略算法,一會(huì)要使用A策略,一會(huì)要使用B策略,怎么設(shè)計(jì)呢?使用多重的條件語句?多重條件語句不易維護(hù),而且出錯(cuò)的概率大大增強(qiáng)。使用策略模式后,可以由其他模塊決定采用何種策略,策略家族對(duì)外提供的訪問接口就是封裝類,簡(jiǎn)化了操作,同時(shí)避免了條件語句判斷。 ??
* 擴(kuò)展性良好
這甚至都不用說是它的優(yōu)點(diǎn),因?yàn)樗黠@了。在現(xiàn)有的系統(tǒng)中增加一個(gè)策略太容易了,只要實(shí)現(xiàn)接口就可以了,其他都不用修改,類似于一個(gè)可反復(fù)拆卸的插件,這大大地符合了OCP原則。

> 缺點(diǎn):
* 策略類數(shù)量增多
每一個(gè)策略都是一個(gè)類,復(fù)用的可能性很小,類數(shù)量增多。 ??
* 所有的策略類都需要對(duì)外暴露
上層模塊必須知道有哪些策略,然后才能決定使用哪一個(gè)策略,這與迪米特法則是相違背的,我只是想使用了一個(gè)策略,我憑什么就要了解這個(gè)策略呢?那要你的封裝類還有什么意義?這是原裝策略模式的一個(gè)缺點(diǎn),幸運(yùn)的是,我們可以使用其他模式來修正這個(gè)缺陷,如工廠方法模式、代理模式或享元模式。

總結(jié)

以上是生活随笔為你收集整理的Strategy Pattern(策略模式)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。