1. 程式人生 > >JavaScript設計模式——策略模式

JavaScript設計模式——策略模式

javaScript設計模式——策略模式

策略模式(Strategy):將定義的一組演算法封裝起來,使其相互之間可以替換。封裝的演算法具有一定獨立性,不會隨客戶端變化而變化。

商品促銷問題

問題描述:超時年底促銷,部分商品5折銷售,部分9折,普通使用者滿100返30,高階VIP使用者滿100返50…

對於前端,一般的處理方式可能是寫多個方法,針對不同的優惠策略選擇不同的方法來處理。如:

//100返30
function return30(price) {
    //dosomething
}
//100返50
function return50(price) {
    //dosomething
}
//9折
function percent90(price) { //dosomething } ...

這裡一個促銷策略對應一個方法顯得過於冗餘,並且很不方便管理,程式碼閱讀性較差。可能有的胖友會想到把這些都封裝為一個方法,然後使用if或者switch語句來判斷狀態並返回策略,如:

function priceStrategy(algorithm,price) {
    switch (algorithm) {
        case 'return30':
            //dosomething
            break;
        case 'return50'
: //dosomething break; case 'percent90': //dosomething break; } } //呼叫方式 priceStrategy('return30',999);

這種方式較上一種已經好了很多,在策略的封裝以及可讀性提高了許多。但是這種方式在尋找策略的時候是從上到下一個一個的找,這樣如果方法多了的話,多少還是會影響一些效率的,所以我們採用物件的方法,使用鍵值對,直接找到對應的策略方法:

//價格策略物件
var priceStrategy = function
() {
var strategy { return30: function(price) { //do something }, return50: function(price) { //do something }, percent90: function(price) { //do something }, percent50: function(price) { //do something } } //演算法呼叫介面 return function(algorithm, price) { //如果演算法存在,則呼叫演算法,否則返回false return strategy[algorithm] && strategy[algorithm](price); } }();

總的來說,策略模式在平常的開發中還是比較常用的一個設計模式,希望對大家有幫助。

相關推薦

JavaScript設計模式策略模式

策略模式策略模式指的是定義一些列的演算法,把他們一個個封裝起來,目的就是將演算法的使用與演算法的實現分離開來。說白了就是以前要很多判斷的寫法,現在把判斷裡面的內容抽離開來,變成一個個小的個體。表單校驗為

JavaScript設計模式——策略模式

javaScript設計模式——策略模式 策略模式(Strategy):將定義的一組演算法封裝起來,使其相互之間可以替換。封裝的演算法具有一定獨立性,不會隨客戶端變化而變化。 商品促銷問題 問題描述:超時年底促銷,部分商品5折銷售,部分9

PHP設計模式-策略模式

行為 一個 文件 ech 策略 something protected this cte <?php//策略模式//將一組特定的算法或行為 封裝成一個類,以適應上下文環境//策略的接口文件 約定策略的行為 針對一種情況 產生具體的策略interface Policy

設計模式——策略模式

contex mas bob listbox inf items 收銀系統 setter .com 聲明:以下內容來源於《大話設計模式》,學習。 策略模式:定義了算法家族,分別封裝起來,讓它們之間可以互相替換,此模式讓算法的變化,不會影響到使用算法的客戶。 商場收費策略:正

設計模式策略模式

onclick sea func cal sdn 不同的 memory hide http 參考http://blog.csdn.net/calmreason/article/details/51029285 定義一系列相同的算法 根據不同需求選擇不同的算法策略 代碼

C++設計模式——策略模式

code spa fine 技術分享 pin ati first virtual headfirst 模式定義:策略模式定義了算法族,分別封裝起來,讓它們之間可以互相替換,此模式讓算法的變化獨立於使用算法的客戶。 舉個例子來説,不同鴨子的行爲是不同的,我們可以把變化的行爲提

Java 設計模式策略模式

ember edm 等級 dia span private edi concrete tin   在閻宏博士的《JAVA與模式》一書中開頭是這樣描述策略(Strategy)模式的:   策略模式屬於對象的行為模式。其用意是針對一組算法,將每一個算法封裝到具有共同接口的獨立的

設計模式之——淺談strategy模式(策略模式)

兩個 事情 操作 none 要去 編碼 淺談 一點 進行 strategy模式,即策略模式。個人覺得吧,策略模式更多的是一種思維方式。 首先我們要知道,為什麽需要策略模式。舉個例子,比如用程序輸出今天下午去玩什麽。 PlayGame 玩遊戲 package site.wa

設計模式---策略模式

不同的 ext 減少 交互 運行時 系列 使用 增加 策略 策略模式:它定義算法家族,分別封裝起來,讓它們之間可以互相替換,此模式讓算法的變化,不會影響到使用算法的客戶。 Context(應用場景): 1. 需要使用ConcreteStrategy提供的算法。 2. 內部

(轉)設計模式——策略模式

提高 {} xiang 有一個 ble 問題 其它 add 新的 轉載地址:http://blog.csdn.net/lifuxiangcaohui/article/details/8065059 這篇文章講述的策略模式非常棒,在此轉載。 設計模式; 一個程序員對設計模

Python設計模式——策略模式(孫悟空用什麽打妖怪)

就是 作用 oop 事情 input 邏輯控制 except exce one #coding:utf-8 ''' 策略模式作用: 就是使用多種算法來解決一個問題,最大的特性的是:能夠在運行時透明地切換算法(客戶端代碼對變化無感知)

C# - 設計模式 - 策略模式

變化 繼承 否則 www. 默認 ref 獨立 UNC int 策略模式 問題場景 多個類型都有一些共同的屬性和方法,可以稱這些成員為行為,為了避免重復在多個類型中編碼相同部分的行為,應考慮將這些行為定義在抽象類(超類)中,利用繼承時多個類型可以共享這些行為。比如定義一

Java設計模式----------策略模式

用戶 無法 提交 main 遊戲 抽象 可能 測試類 ide 以下內容來自HeadFIrst設計模式一書和http://www.cnblogs.com/xrq730/p/4906313.html的博文,作為自己的學習筆記總結如下。 HeadFirst設計模式一書在開篇就

設計模式-策略模式

設計模式 策略模式 public abstract class baseClass { public abstract double getResult(double num1,double num2); } public class A:baseClass { pub

PHP設計模式 -- 策略模式

所有 約定 IT 傳統 else emc 區別 ima TP 策略模式:   6、將一組特定的行為和算法封裝成類,以適應某些特定的上下文環境。   1、 多個類只區別在表現行為不同,可以使用Strategy模式,在運行時動態選擇具體要執行的行為。 2、 需要在

java設計模式-策略模式

temp return private 數組排序 寫法 冒泡 有一種 eth RF 背景:將一個數組排序,並且打印; 1.下面使用選擇排序、和冒泡排序來寫:                         public class Test { public

設計模式-策略模式(strategy pattern)

pre rac uml類圖 獨立 CA 使用 dep () nes 來說說設計模式吧,最近開始看設計模式,覺得挺有意思的。設計模式網上的資料的挺多的,而且大部分是大家相互轉來轉去的。感覺也挺沒有意思。我就自己寫一點吧! 開始 學習設計模式,我

Java常用設計模式——策略模式

nts static 管理 選擇 span disco rri contex 由於 策略模式定義了一系列的算法,並將每一個算法封裝起來,而且使它們還可以相互替換,策略模式讓算法獨立於使用它的客戶而獨立變化。策略模式使這些算法在客戶端調用它們的時候能夠互不影響地變化

JavaScript形而上的策略模式

定義 table ava 使用 amd 簡潔 prop 相互 並且 什麽是策略模式? 先看代碼片段1。 // 代碼片段1 var bonus = new Bonus(); bonus.setSalary(10000); bonus.setStrategy(new perfo

HeadFirst設計模式---策略模式 C#實現

模式 adf oid info wing face rmq protected src 鴨子基類 將行為封裝起來 class Duck { protected IFlyBehavior flyBehavior; protec