您好,登錄后才能下訂單哦!
這篇文章主要講解了如何使用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稱之為狀態類的行為,每一個狀態類的行為都有所不同。
狀態模式總結:
優點:
* 封裝了狀態的轉換規則,在狀態模式中可以將狀態的轉換代碼封裝在環境類或者具體狀態類中,方便對狀態轉換代碼進行管理。
* 將所有與某個狀態有關的行為放到一個類中,只需要注入一個不同的狀態對象即可使環境對象擁有不同行為
缺點:
* 狀態模式的使用必然會增加系統中狀態類的數量,導致開銷變大。
* 結構設計交付為咋,使用不當會導致程序結構和代碼混亂,增加系統設計難度。
適用場景:
* 對象的行為依賴于它的狀態,狀態改變將導致行為的變化
* 在代碼中包含大量與對象狀態有關的條件語句
看完上述內容,是不是對如何使用javascript中的狀態模式有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。