策略模式支援在執行時由使用者選擇合適的演算法,對於使用者而言不用關心背後的具體實現,由使用者自動根據當前程式執行的上下文和配置,從已有的演算法列列表中選擇出合適的演算法來處理當前任務。
上面的兩個例子就是策略模式,比如根據選擇的刷子的種類不同,我們可以刷出不同樣式的線條出來,但是各種刷子背後的實現機制我們並不需要關心,我們只需要關心當前圖中需要應用哪種刷子可以完成任務。 商品類似。
通過使用策略模式,我們可以很好地解決呼叫和需要呼叫的演算法的耦合、增強可擴充套件性、可維護性等。
對於策略模式,最為常用的場景就是 ---表單驗證。
通常對於乙個表單,各個欄位的輸入值可能格式不一,**號碼、密碼、郵箱,使用數字、字元等等,多個字段還要驗證非空,一般而言,我們的實現方式可能是十幾個甚至幾
十、上百個if、else,但是這樣看上去驗證函式會非常冗餘。這時,我們可以吧常見的驗證策略抽象為乙個策略集合,使用者需要對表單資料進行校驗時,只需要傳入資料以及指定各個欄位的驗證策略,就可以給出相應的驗證結果了。
我們期望這樣的呼叫:
//那麼,下面我們就看看如何實現這樣的validator物件 ---針對每種校驗策略,我們需要指定校驗方法和校驗失敗時的錯誤提示,這些策略可以掛載到validator物件內部方便管理:待校驗的資料
var data =;
//校驗規則配置
validator.config =,
identity: ,
birthday: ,
mobile: ,
sparemobile: ,
email:
};//
呼叫獲得校驗結果
validator.validate(data);
if(validator.haserrors())
//期望結果:
/*姓名只能為 2-4 個字的漢字
生日與身份證號不一致,請修改
生日格式不合法,請按 "2008-01-01" 格式輸入日期
備用手機號碼不得與手機號碼相同,請重新輸入
email 格式不合法,請輸入正確的 email 位址
*/
//這樣,以後,每次出現了需要驗證的新的策略,我們就只需要將之新增到validator.types下面,然後在validator.config中新增校驗規則,**其他部分就不需要再進行調整了,依然執行validator.validate方法。所有可用的校驗
validator.types =,
message:
"不得為空 "},
isnotequalto: ,
message: function(fieldtext)
},isvalidname: $/.test(value);
},message:
"只能為 2-4 個字的漢字 "},
...};
JavaScript設計模式
js類設計模式一 類建構函式 function myclass 定義公共屬性 myclass.prototype 定義公共方法 myclass.prototype.methoda function myclass.prototype.methodb function 呼叫 var objclass ...
JavaScript 設計模式
1 單例模式 singleton pattern 單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中乙個類只有乙個例項。即乙個類只有乙個物件例項 單例模式會阻止其他物件例項化其自己的單例物件的副本,從而確保所有物件都訪問唯一例項。因為類控制了...
JavaScript設計模式
設計模式是什麼?設計模式就是一套被反覆使用 多數人知曉的 經過分類編目的 設計經驗的總結。為什麼要使用設計模式?設計模式可重用 讓 更容易被他人理解 保證 可靠性,設計模式使 編制真正工程化。設計模式怎麼來的?設計模式概念是由四人幫 設計模式 可復用物件導向軟體的基礎 的四位作者 提出,總共分成了三...