摘要:策略模式定義一系列的算法把它們一個(gè)個(gè)封裝起來并且使它們可相互替換。策略模式要素策略接口,用來約束一系列具體的策略算法。策略模式策略購買輛總金額策略購買輛總金額策略模式優(yōu)點(diǎn)算法可以自由切換。策略模式缺點(diǎn)策略類會(huì)增多。所有策略類都需要對(duì)外暴露。
策略模式
定義一系列的算法,把它們一個(gè)個(gè)封裝起來, 并且使它們可相互替換。本模式使得算法可獨(dú)立于使用它的客戶而變化。
策略模式是把一個(gè)類中經(jīng)常改變或者將來可能改變的部分提取出來作為一個(gè)接口,然后在類中包含這個(gè)對(duì)象的實(shí)例,這樣類的實(shí)例在運(yùn)行時(shí)就可以隨意調(diào)用實(shí)現(xiàn)了這個(gè)接口的類的行為。
1.Strategy:策略接口,用來約束一系列具體的策略算法。Context使用這個(gè)接口來調(diào)用具體的策略,實(shí)現(xiàn)定義的策略。
2.ConcreteStrategy:具體的策略實(shí)現(xiàn),也就是具體的算法實(shí)現(xiàn)。
3.Context:上下文,負(fù)責(zé)與具體的策略交互,通常上下文會(huì)持有一個(gè)真正的策略實(shí)現(xiàn)。
現(xiàn)在車的價(jià)格可能根據(jù)市場(chǎng)需求變動(dòng)隨時(shí)調(diào)整,對(duì)于不同銷售商訂購輛數(shù)進(jìn)行優(yōu)惠。
// 策略模式 var DP = require("./DesignPattern.js"); function Strategy() { DP.Interface(this, ["calPrice"]); } function Nodiscount() { this.__proto__ = new Strategy(); this.calPrice = function (price, num) { return price * num; } } function Disount1() { this.__proto__ = new Strategy(); this.calPrice = function (price, num) { return price * num * 0.95; } } function Context(strategy) { var _strategy=strategy; this.calPrice = function (price, num) { return _strategy.calPrice(price, num) } } var nodiscount = new Nodiscount(); var disount1 = new Disount1(); var nodiscountContext = new Context(nodiscount); console.log("Nodiscount策略購買3輛總金額: " + nodiscountContext.calPrice(10000,3)); var disount1Context = new Context(disount1); console.log("disount1策略購買3輛總金額: " + disount1Context.calPrice(10000,3));策略模式優(yōu)點(diǎn):
1.算法可以自由切換。
2.避免使用多重條件判斷。
3.擴(kuò)展性良好。
策略模式缺點(diǎn):
1.策略類會(huì)增多。
2.所有策略類都需要對(duì)外暴露。
適用場(chǎng)景:
1.如果在一個(gè)系統(tǒng)里面有許多類,它們之間的區(qū)別僅在于它們的行為,那么使用策略模式可以動(dòng)態(tài)地讓一個(gè)對(duì)象在許多行為中選擇一種行為。
2.一個(gè)系統(tǒng)需要?jiǎng)討B(tài)地在幾種算法中選擇一種。
3.一個(gè)類定義了多種行為, 并且這些行為在這個(gè)類的操作中以多個(gè)條件語句的形式出現(xiàn)。將相關(guān)的條件分支移入它們各自的Strategy類中以代替這些條件語句。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/79541.html
摘要:推文用設(shè)計(jì)模式解構(gòu)三國(guó)是一種什么體驗(yàn)行為型設(shè)計(jì)模式一策略模式工廠模式優(yōu)化結(jié)構(gòu)狀態(tài)模式隨著狀態(tài)改變而改變行為。推文狀態(tài)機(jī)與狀態(tài)模式責(zé)任鏈模式多個(gè)對(duì)象依次處理請(qǐng)求前者指定后者。代理模式代理針對(duì)一個(gè)對(duì)象,為了增加控制等中介雙方都是多個(gè),為了解耦。 策略模式 選擇使用封裝好的一系列算法,可相互替換。 類比:商店[Context]買完衣服買單[Stratege](現(xiàn)金[Concrete Stra...
摘要:時(shí)間永遠(yuǎn)都過得那么快,一晃從年注冊(cè),到現(xiàn)在已經(jīng)過去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時(shí)候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...
摘要:云計(jì)算十大關(guān)鍵詞分別是云原生高性能混沌工程混合云邊緣計(jì)算零信任優(yōu)化治理數(shù)字政府低碳云企業(yè)數(shù)字化轉(zhuǎn)型。當(dāng)前,云原生與云安全呈加速融合趨勢(shì)。 7月27日,由中國(guó)信息通信研究院、中國(guó)通信標(biāo)準(zhǔn)化協(xié)會(huì)主辦的2021年可信云大會(huì)在京召開。中國(guó)信息通信研究院云計(jì)算與大數(shù)據(jù)研究所所長(zhǎng)何寶宏在會(huì)上正式發(fā)布2021云計(jì)算十大關(guān)鍵詞以及對(duì)應(yīng)的重要發(fā)展趨勢(shì)。 ? ...
摘要:解決方案解釋器模式來解決用來解決上述問題的一個(gè)合理的解決方案,就是使用解釋器模式。使用解釋器模式重寫示例通過上面的講述可以看出,要使用解釋器模式,一個(gè)重要的前提就是要定義一套語法規(guī)則,也稱為文法。#1 場(chǎng)景問題# ##1.1 讀取配置文件## 考慮這樣一個(gè)實(shí)際的應(yīng)用,維護(hù)系統(tǒng)自定義的配置文件。 幾乎每個(gè)實(shí)際的應(yīng)用系統(tǒng)都有與應(yīng)用自身相關(guān)的配置文件,這個(gè)配置文件是由開發(fā)人員根據(jù)需要自定義的,系統(tǒng)...
摘要:解決方案解釋器模式來解決用來解決上述問題的一個(gè)合理的解決方案,就是使用解釋器模式。使用解釋器模式重寫示例通過上面的講述可以看出,要使用解釋器模式,一個(gè)重要的前提就是要定義一套語法規(guī)則,也稱為文法。#1 場(chǎng)景問題# ##1.1 讀取配置文件## 考慮這樣一個(gè)實(shí)際的應(yīng)用,維護(hù)系統(tǒng)自定義的配置文件。 幾乎每個(gè)實(shí)際的應(yīng)用系統(tǒng)都有與應(yīng)用自身相關(guān)的配置文件,這個(gè)配置文件是由開發(fā)人員根據(jù)需要自定義的,系統(tǒng)...
閱讀 3526·2021-11-17 17:01
閱讀 3935·2021-11-08 13:12
閱讀 2490·2021-10-08 10:04
閱讀 710·2021-09-29 09:35
閱讀 1430·2021-09-26 10:12
閱讀 2063·2021-09-07 09:58
閱讀 1966·2019-08-30 15:55
閱讀 2144·2019-08-30 13:14