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

資訊專欄INFORMATION COLUMN

JS 設計模式 十四(策略模式)

sutaking / 479人閱讀

摘要:策略模式定義一系列的算法把它們一個個封裝起來并且使它們可相互替換。策略模式要素策略接口,用來約束一系列具體的策略算法。策略模式策略購買輛總金額策略購買輛總金額策略模式優點算法可以自由切換。策略模式缺點策略類會增多。所有策略類都需要對外暴露。

策略模式

定義一系列的算法,把它們一個個封裝起來, 并且使它們可相互替換。本模式使得算法可獨立于使用它的客戶而變化。
策略模式是把一個類中經常改變或者將來可能改變的部分提取出來作為一個接口,然后在類中包含這個對象的實例,這樣類的實例在運行時就可以隨意調用實現了這個接口的類的行為。

策略模式要素

1.Strategy:策略接口,用來約束一系列具體的策略算法。Context使用這個接口來調用具體的策略,實現定義的策略。
2.ConcreteStrategy:具體的策略實現,也就是具體的算法實現。
3.Context:上下文,負責與具體的策略交互,通常上下文會持有一個真正的策略實現。

實例

現在車的價格可能根據市場需求變動隨時調整,對于不同銷售商訂購輛數進行優惠。

// 策略模式

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));
策略模式優點:

1.算法可以自由切換。
2.避免使用多重條件判斷。
3.擴展性良好。

策略模式缺點:
1.策略類會增多。
2.所有策略類都需要對外暴露。

適用場景:
1.如果在一個系統里面有許多類,它們之間的區別僅在于它們的行為,那么使用策略模式可以動態地讓一個對象在許多行為中選擇一種行為。
2.一個系統需要動態地在幾種算法中選擇一種。
3.一個類定義了多種行為, 并且這些行為在這個類的操作中以多個條件語句的形式出現。將相關的條件分支移入它們各自的Strategy類中以代替這些條件語句。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/79541.html

相關文章

  • 忘了再看設計模式-行為型

    摘要:推文用設計模式解構三國是一種什么體驗行為型設計模式一策略模式工廠模式優化結構狀態模式隨著狀態改變而改變行為。推文狀態機與狀態模式責任鏈模式多個對象依次處理請求前者指定后者。代理模式代理針對一個對象,為了增加控制等中介雙方都是多個,為了解耦。 策略模式 選擇使用封裝好的一系列算法,可相互替換。 類比:商店[Context]買完衣服買單[Stratege](現金[Concrete Stra...

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

    摘要:時間永遠都過得那么快,一晃從年注冊,到現在已經過去了年那些被我藏在收藏夾吃灰的文章,已經太多了,是時候把他們整理一下了。那是因為收藏夾太亂,橡皮擦給設置私密了,不收拾不好看呀。 ...

    Harriet666 評論0 收藏0
  • 2021云計算十大關鍵詞:云原生、高性能、混沌工程、混合云、邊緣計算、零信任、優化治理、數字政府、低

    摘要:云計算十大關鍵詞分別是云原生高性能混沌工程混合云邊緣計算零信任優化治理數字政府低碳云企業數字化轉型。當前,云原生與云安全呈加速融合趨勢。 7月27日,由中國信息通信研究院、中國通信標準化協會主辦的2021年可信云大會在京召開。中國信息通信研究院云計算與大數據研究所所長何寶宏在會上正式發布2021云計算十大關鍵詞以及對應的重要發展趨勢。 ? ...

    CastlePeaK 評論0 收藏0
  • 設計模式(二十四)解釋器模式

    摘要:解決方案解釋器模式來解決用來解決上述問題的一個合理的解決方案,就是使用解釋器模式。使用解釋器模式重寫示例通過上面的講述可以看出,要使用解釋器模式,一個重要的前提就是要定義一套語法規則,也稱為文法。#1 場景問題# ##1.1 讀取配置文件## 考慮這樣一個實際的應用,維護系統自定義的配置文件。 幾乎每個實際的應用系統都有與應用自身相關的配置文件,這個配置文件是由開發人員根據需要自定義的,系統...

    番茄西紅柿 評論0 收藏0
  • 設計模式(二十四)解釋器模式

    摘要:解決方案解釋器模式來解決用來解決上述問題的一個合理的解決方案,就是使用解釋器模式。使用解釋器模式重寫示例通過上面的講述可以看出,要使用解釋器模式,一個重要的前提就是要定義一套語法規則,也稱為文法。#1 場景問題# ##1.1 讀取配置文件## 考慮這樣一個實際的應用,維護系統自定義的配置文件。 幾乎每個實際的應用系統都有與應用自身相關的配置文件,這個配置文件是由開發人員根據需要自定義的,系統...

    番茄西紅柿 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<