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

javascript設計模式 – 狀態模式原理與用法例項分析

本文例項講述了javascript設計模式 – 狀態模式原理與用法。分享給大家供大家參考,具體如下:

介紹:狀態模式用於解決系統中複雜物件的狀態轉換以及不同狀態下行為的封裝問題。狀態模式將一個物件的狀態從該物件中分離出來,使得物件狀態可以靈活變化。

定義:允許一個物件在其內部狀態改變時改變它的行為,物件看起來似乎修改了它的類,其別名為狀態物件,狀態模式是一種物件行為型模式。

場景:在很多情況下我們的頁面需要做一些狀態判斷,是否註冊,是否登入,剩餘金額是否大於500等等,我們通常是在元件中通過if…else…來做不同的處理,這種方式耦合嚴重不滿足單一職責原則。如何解決這個問題呢,這一節我們利用狀態模式來解決物件的狀態切換。

示例:

var Dialog = function(){
  var _state = null;
 
  this.setState = function(state){
    _state = state;
  }
  this.getState = function(){
    return _state;
  }
}
 
var ShowState = function(){
  this.doAction = function(dialog){
    console.log("對Dialog設定顯示狀態:");
    dialog.setState(this);
  }
  this.toString = function(){
    console.log("顯示中......");
  }
}
 
var HideState = function(){
  this.doAction = function(dialog){
    console.log("對Dialog設定隱藏狀態:");
    dialog.setState(this);
  }
  this.toString = function(){
    console.log("已隱藏......");
  }
}
 
var dialog = new Dialog();
 
var showState = new ShowState();
var hideState = new HideState();
 
showState.doAction(dialog);
//對Dialog設定顯示狀態:
dialog.getState().toString();
//顯示中......
hideState.doAction(dialog);
//對Dialog設定隱藏狀態
dialog.getState().toString();
//已隱藏......

這個例子裡Dialog物件有兩種狀態,顯示和隱藏,我把兩種狀態提取出來,使得狀態的管理更加靈活。在這個例子裡面Dialog稱之為環境類,環境類又稱為上下文類,他擁有多種狀態。環境類內部需要維護一個state物件用來定義當前狀態。HideState,ShowState稱之為狀態類,對應環境類的一個具體狀態,toString稱之為狀態類的行為,每一個狀態類的行為都有所不同。

狀態模式總結:

優點:
* 封裝了狀態的轉換規則,在狀態模式中可以將狀態的轉換程式碼封裝在環境類或者具體狀態類中,方便對狀態轉換程式碼進行管理。
* 將所有與某個狀態有關的行為放到一個類中,只需要注入一個不同的狀態物件即可使環境物件擁有不同行為

缺點:
* 狀態模式的使用必然會增加系統中狀態類的數量,導致開銷變大。
* 結構設計交付為咋,使用不當會導致程式結構和程式碼混亂,增加系統設計難度。

適用場景:
* 物件的行為依賴於它的狀態,狀態改變將導致行為的變化
* 在程式碼中包含大量與物件狀態有關的條件語句

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

更多關於JavaScript相關內容感興趣的讀者可檢視本站專題:《javascript面向物件入門教程》、《JavaScript錯誤與除錯技巧總結》、《JavaScript資料結構與演算法技巧總結》、《JavaScript遍歷演算法與技巧總結》及《JavaScript數學運算用法總結》

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