1. 程式人生 > 程式設計 >javascript設計模式 – 命令模式原理與用法例項分析

javascript設計模式 – 命令模式原理與用法例項分析

本文例項講述了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程式設計有所幫助。