javascript設(shè)計(jì)模式 – 命令模式原理與用法實(shí)例分析
本文實(shí)例講述了javascript設(shè)計(jì)模式 – 命令模式原理與用法。分享給大家供大家參考,具體如下:
介紹:命令模式是一種數(shù)據(jù)驅(qū)動(dòng)的設(shè)計(jì)模式,將請求以命令的形式包裹在對象中,并傳遞給調(diào)用對象。命令模式的核心在于引入了命令類,通過命令類來降低發(fā)送者和接受者的耦合度。
定義:將一個(gè)請求封裝為一個(gè)對象,從而可用不同的請求對客戶進(jìn)行參數(shù)化;對請求排隊(duì)或者記錄請求日志,以及支持可撤銷的操作。命令模式是一種對象行為型模式,其別名為動(dòng)作(Action)模式或事務(wù)(Transaction)模式。
場景:我們通過買賣股票的場景來實(shí)現(xiàn)下命令模式,
示例:
var Stock = function(){
this.name = 'baidu';
this.quantity = 100;
this.buy = function(){
console.log('購買了:' + this.quantity + '股' + this.name);
}
this.sell = function(){
console.log('賣出了:' + this.quantity + '股' + this.name);
}
}
var BuyStock = function(stock){
this.stock = stock;
this.execute = function(){
this.stock.buy();
}
}
var SellStock = function(stock){
this.stock = stock;
this.execute = function(){
this.stock.sell();
}
}
var Broker = function(){
this.orderList = [];
this.takeOrder = function(order){
this.orderList.push(order);
}
this.placeOrders = function(){
this.orderList.map(function(item){
item.execute();
})
this.orderList = [];
}
}
var stock = new Stock();
var buyStock = new BuyStock(stock);
var sellStock = new SellStock(stock);
var broker = new Broker();
broker.takeOrder(buyStock);
broker.takeOrder(sellStock);
broker.placeOrders();
// 購買了:100股baidu
// 賣出了:100股baidu
這個(gè)例子里面SellStock,BuyStock為命令類,執(zhí)行實(shí)際的命令。Broker用來接收命令,并在指定的時(shí)機(jī)執(zhí)行命令。Stock為請求受體,
回頭看下定義:sellStock,buyStock就是將命令封裝好的對象,你可以通過對象的execute方法執(zhí)行該命令。通過擴(kuò)展placeOrders方法可以支持請求隊(duì)列或者記錄請求日志,以及支持可撤銷等操作
命令模式總結(jié):
優(yōu)點(diǎn):
* 降低系統(tǒng)耦合度
* 新的命令很容易的加入到系統(tǒng)中
缺點(diǎn):
* 使用命令模式可能會(huì)導(dǎo)致某些系統(tǒng)有過多的具體命令類
適用場景:
* 系統(tǒng)需要將請求調(diào)用者和請求接受者解耦
感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運(yùn)行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼運(yùn)行效果。
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》
希望本文所述對大家JavaScript程序設(shè)計(jì)有所幫助。
相關(guān)文章
JavaScript的模塊化:封裝(閉包),繼承(原型) 介紹
在復(fù)雜的邏輯下, JavaScript 需要被模塊化,模塊需要封裝起來,只留下供外界調(diào)用的接口。閉包是 JavaScript 中實(shí)現(xiàn)模塊封裝的關(guān)鍵,也是很多初學(xué)者難以理解的要點(diǎn)2013-07-07
一文教你用JavaScript制作個(gè)簡單的大轉(zhuǎn)盤游戲
日常生活中,我們經(jīng)常會(huì)見到形形色色的抽獎(jiǎng)活動(dòng),例如九宮格、大轉(zhuǎn)盤等等……本文就來教大家如何利用JavaScript制作個(gè)簡單的大轉(zhuǎn)盤游戲,感興趣的可以了解一下2023-02-02
基于javascript實(shí)現(xiàn)tab切換特效
這篇文章主要介紹了基于javascript實(shí)現(xiàn)tab切換特效的相關(guān)資料,具有一定的參考價(jià)值,需要的朋友可以參考下2016-03-03
JavaScript實(shí)現(xiàn)給浮點(diǎn)數(shù)添加千分位逗號的多種方法
JavaScript 是一門強(qiáng)大的前端語言,在處理數(shù)值格式化時(shí)提供了多種方法,在開發(fā)過程中,我們經(jīng)常需要將大數(shù)字格式化,使其更具可讀性,例如,將 12000000.11 轉(zhuǎn)換為 12,000,000.11,本文將詳細(xì)介紹 JavaScript 中如何實(shí)現(xiàn)這種格式化,需要的朋友可以參考下2025-04-04
基于JavaScript+HTML編寫一個(gè)日期選擇插件
在現(xiàn)代Web應(yīng)用程序中,日期選擇器是一個(gè)非常常見的組件,用戶可以使用它來選擇特定的日期,在本篇文章中,我們將使用JavaScript和HTML來創(chuàng)建一個(gè)簡單但功能強(qiáng)大的日期選擇插件,這個(gè)日期選擇插件是比較考驗(yàn)Js基本功的,需要的朋友可以參考下2023-10-10
javascript實(shí)時(shí)顯示當(dāng)天日期的方法
這篇文章主要介紹了javascript實(shí)時(shí)顯示當(dāng)天日期的方法,可實(shí)時(shí)顯示當(dāng)前日期及星期的功能,非常簡單實(shí)用,需要的朋友可以參考下2015-05-05
Web版彷 Visual Studio 2003 顏色選擇器
Web版彷 Visual Studio 2003 顏色選擇器...2007-01-01

