久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

您的位置:首頁技術文章
文章詳情頁

javascript設計模式 ? 命令模式原理與用法實例分析

瀏覽:3日期:2023-11-03 08:55:49

本文實例講述了javascript設計模式 ? 命令模式原理與用法。分享給大家供大家參考,具體如下:

介紹:命令模式是一種數據驅動的設計模式,將請求以命令的形式包裹在對象中,并傳遞給調用對象。命令模式的核心在于引入了命令類,通過命令類來降低發送者和接受者的耦合度。

定義:將一個請求封裝為一個對象,從而可用不同的請求對客戶進行參數化;對請求排隊或者記錄請求日志,以及支持可撤銷的操作。命令模式是一種對象行為型模式,其別名為動作(Action)模式或事務(Transaction)模式。

場景:我們通過買賣股票的場景來實現下命令模式,

示例:

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

這個例子里面SellStock,BuyStock為命令類,執行實際的命令。Broker用來接收命令,并在指定的時機執行命令。Stock為請求受體,

回頭看下定義:sellStock,buyStock就是將命令封裝好的對象,你可以通過對象的execute方法執行該命令。通過擴展placeOrders方法可以支持請求隊列或者記錄請求日志,以及支持可撤銷等操作

命令模式總結:

優點:* 降低系統耦合度* 新的命令很容易的加入到系統中

缺點:* 使用命令模式可能會導致某些系統有過多的具體命令類

適用場景:* 系統需要將請求調用者和請求接受者解耦

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼運行效果。

更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《javascript面向對象入門教程》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數學運算用法總結》

希望本文所述對大家JavaScript程序設計有所幫助。

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 都昌县| 泸州市| 大厂| 白水县| 上虞市| 临澧县| 临高县| 邵东县| 龙泉市| 囊谦县| 陇南市| 磐石市| 睢宁县| 左云县| 泗洪县| 钟祥市| 四会市| 庆元县| 信丰县| 大厂| 张家界市| 博乐市| 油尖旺区| 安龙县| 新平| 会东县| 西盟| 长岭县| 彝良县| 襄垣县| 微博| 昌图县| 呼图壁县| 普宁市| 巩留县| 来凤县| 平湖市| 鄂尔多斯市| 阿尔山市| 新营市| 神池县|