JavaScript設計模式(三) 策略模式

2021-09-08 13:27:29 字數 1666 閱讀 4942

策略模式支援在執行時由使用者選擇合適的演算法,對於使用者而言不用關心背後的具體實現,由使用者自動根據當前程式執行的上下文和配置,從已有的演算法列列表中選擇出合適的演算法來處理當前任務。

上面的兩個例子就是策略模式,比如根據選擇的刷子的種類不同,我們可以刷出不同樣式的線條出來,但是各種刷子背後的實現機制我們並不需要關心,我們只需要關心當前圖中需要應用哪種刷子可以完成任務。 商品類似。

通過使用策略模式,我們可以很好地解決呼叫和需要呼叫的演算法的耦合、增強可擴充套件性、可維護性等。 

對於策略模式,最為常用的場景就是 ---表單驗證

通常對於乙個表單,各個欄位的輸入值可能格式不一,**號碼、密碼、郵箱,使用數字、字元等等,多個字段還要驗證非空,一般而言,我們的實現方式可能是十幾個甚至幾

十、上百個if、else,但是這樣看上去驗證函式會非常冗餘。這時,我們可以吧常見的驗證策略抽象為乙個策略集合,使用者需要對表單資料進行校驗時,只需要傳入資料以及指定各個欄位的驗證策略,就可以給出相應的驗證結果了。

我們期望這樣的呼叫:

//

待校驗的資料

var data =;

//校驗規則配置

validator.config =,

identity: ,

birthday: ,

mobile: ,

sparemobile: ,

email:

};//

呼叫獲得校驗結果

validator.validate(data);

if(validator.haserrors())

//期望結果:

/*姓名只能為 2-4 個字的漢字

生日與身份證號不一致,請修改

生日格式不合法,請按 "2008-01-01" 格式輸入日期

備用手機號碼不得與手機號碼相同,請重新輸入

email 格式不合法,請輸入正確的 email 位址

*/

那麼,下面我們就看看如何實現這樣的validator物件 ---針對每種校驗策略,我們需要指定校驗方法和校驗失敗時的錯誤提示,這些策略可以掛載到validator物件內部方便管理:

//

所有可用的校驗

validator.types =,

message:

"不得為空 "},

isnotequalto: ,

message: function(fieldtext)

},isvalidname: $/.test(value);

},message:

"只能為 2-4 個字的漢字 "},

...};

這樣,以後,每次出現了需要驗證的新的策略,我們就只需要將之新增到validator.types下面,然後在validator.config中新增校驗規則,**其他部分就不需要再進行調整了,依然執行validator.validate方法。

JavaScript設計模式

js類設計模式一 類建構函式 function myclass 定義公共屬性 myclass.prototype 定義公共方法 myclass.prototype.methoda function myclass.prototype.methodb function 呼叫 var objclass ...

JavaScript 設計模式

1 單例模式 singleton pattern 單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中乙個類只有乙個例項。即乙個類只有乙個物件例項 單例模式會阻止其他物件例項化其自己的單例物件的副本,從而確保所有物件都訪問唯一例項。因為類控制了...

JavaScript設計模式

設計模式是什麼?設計模式就是一套被反覆使用 多數人知曉的 經過分類編目的 設計經驗的總結。為什麼要使用設計模式?設計模式可重用 讓 更容易被他人理解 保證 可靠性,設計模式使 編制真正工程化。設計模式怎麼來的?設計模式概念是由四人幫 設計模式 可復用物件導向軟體的基礎 的四位作者 提出,總共分成了三...