国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JS 設(shè)計(jì)模式 十四(策略模式)

sutaking / 488人閱讀

摘要:策略模式定義一系列的算法把它們一個(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)。

實(shí)例

現(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

相關(guān)文章

  • 忘了再看設(shè)計(jì)模式-行為型

    摘要:推文用設(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...

    ShevaKuilin 評(píng)論0 收藏0
  • 首次公開,整理12年積累的博客收藏夾,零距離展示《收藏夾吃灰》系列博客

    摘要:時(shí)間永遠(yuǎn)都過得那么快,一晃從年注冊(cè),到現(xiàn)在已經(jīng)過去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時(shí)候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...

    Harriet666 評(píng)論0 收藏0
  • 2021云計(jì)算十大關(guān)鍵詞:云原生、高性能、混沌工程、混合云、邊緣計(jì)算、零信任、優(yōu)化治理、數(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ì)。 ? ...

    CastlePeaK 評(píng)論0 收藏0
  • 設(shè)計(jì)模式(二十四)解釋器模式

    摘要:解決方案解釋器模式來解決用來解決上述問題的一個(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)...

    番茄西紅柿 評(píng)論0 收藏0
  • 設(shè)計(jì)模式(二十四)解釋器模式

    摘要:解決方案解釋器模式來解決用來解決上述問題的一個(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)...

    番茄西紅柿 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<