最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

javascript設(shè)計模式 – 狀態(tài)模式原理與用法實例分析

 更新時間:2020年04月22日 08:41:32   作者:李小強  
這篇文章主要介紹了javascript設(shè)計模式 – 狀態(tài)模式,結(jié)合實例形式分析了javascript狀態(tài)模式相關(guān)概念、原理、用法及操作注意事項,需要的朋友可以參考下

本文實例講述了javascript設(shè)計模式 – 狀態(tài)模式原理與用法。分享給大家供大家參考,具體如下:

介紹:狀態(tài)模式用于解決系統(tǒng)中復(fù)雜對象的狀態(tài)轉(zhuǎn)換以及不同狀態(tài)下行為的封裝問題。狀態(tài)模式將一個對象的狀態(tài)從該對象中分離出來,使得對象狀態(tài)可以靈活變化。

定義:允許一個對象在其內(nèi)部狀態(tài)改變時改變它的行為,對象看起來似乎修改了它的類,其別名為狀態(tài)對象,狀態(tài)模式是一種對象行為型模式。

場景:在很多情況下我們的頁面需要做一些狀態(tài)判斷,是否注冊,是否登錄,剩余金額是否大于500等等,我們通常是在組件中通過if…else…來做不同的處理,這種方式耦合嚴(yán)重不滿足單一職責(zé)原則。如何解決這個問題呢,這一節(jié)我們利用狀態(tài)模式來解決對象的狀態(tài)切換。

示例:

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設(shè)置顯示狀態(tài):");
    dialog.setState(this);
  }
  this.toString = function(){
    console.log("顯示中......");
  }
}
 
var HideState = function(){
  this.doAction = function(dialog){
    console.log("對Dialog設(shè)置隱藏狀態(tài):");
    dialog.setState(this);
  }
  this.toString = function(){
    console.log("已隱藏......");
  }
}
 
var dialog = new Dialog();
 
var showState = new ShowState();
var hideState = new HideState();
 
showState.doAction(dialog);
//對Dialog設(shè)置顯示狀態(tài):
dialog.getState().toString();
//顯示中......
hideState.doAction(dialog);
//對Dialog設(shè)置隱藏狀態(tài)
dialog.getState().toString();
//已隱藏......

這個例子里Dialog對象有兩種狀態(tài),顯示和隱藏,我把兩種狀態(tài)提取出來,使得狀態(tài)的管理更加靈活。在這個例子里面Dialog稱之為環(huán)境類,環(huán)境類又稱為上下文類,他擁有多種狀態(tài)。環(huán)境類內(nèi)部需要維護一個state對象用來定義當(dāng)前狀態(tài)。HideState,ShowState稱之為狀態(tài)類,對應(yīng)環(huán)境類的一個具體狀態(tài),toString稱之為狀態(tài)類的行為,每一個狀態(tài)類的行為都有所不同。

狀態(tài)模式總結(jié):

優(yōu)點:
* 封裝了狀態(tài)的轉(zhuǎn)換規(guī)則,在狀態(tài)模式中可以將狀態(tài)的轉(zhuǎn)換代碼封裝在環(huán)境類或者具體狀態(tài)類中,方便對狀態(tài)轉(zhuǎn)換代碼進行管理。
* 將所有與某個狀態(tài)有關(guān)的行為放到一個類中,只需要注入一個不同的狀態(tài)對象即可使環(huán)境對象擁有不同行為

缺點:
* 狀態(tài)模式的使用必然會增加系統(tǒng)中狀態(tài)類的數(shù)量,導(dǎo)致開銷變大。
* 結(jié)構(gòu)設(shè)計交付為咋,使用不當(dāng)會導(dǎo)致程序結(jié)構(gòu)和代碼混亂,增加系統(tǒng)設(shè)計難度。

適用場景:
* 對象的行為依賴于它的狀態(tài),狀態(tài)改變將導(dǎo)致行為的變化
* 在代碼中包含大量與對象狀態(tài)有關(guān)的條件語句

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

更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript錯誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運算用法總結(jié)

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

相關(guān)文章

  • 關(guān)于JavaScript中事件綁定的方法總結(jié)

    關(guān)于JavaScript中事件綁定的方法總結(jié)

    下面小編就為大家?guī)硪黄狫avaScript中事件綁定的方法總結(jié)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10
  • 讓 JavaScript 輕松支持函數(shù)重載 (Part 2 - 實現(xiàn))

    讓 JavaScript 輕松支持函數(shù)重載 (Part 2 - 實現(xiàn))

    在上一篇文章里,我們設(shè)計了一套能在JavaScript中描述函數(shù)重載的方法,這套方法依賴于一個叫做Overload的靜態(tài)類,現(xiàn)在我們就來看看如何實現(xiàn)這個靜態(tài)類。
    2009-08-08
  • js replace() 文本替換你所不知的

    js replace() 文本替換你所不知的

    今天看了一個函數(shù),功能是把形如word-word的字符串轉(zhuǎn)化為wordWord
    2010-03-03
  • js中數(shù)組對象去重的兩種方法

    js中數(shù)組對象去重的兩種方法

    今天小編就為大家分享一篇關(guān)于js中數(shù)組對象去重的兩種方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 純js實現(xiàn)手風(fēng)琴效果

    純js實現(xiàn)手風(fēng)琴效果

    這篇文章主要介紹了純js+html制作手風(fēng)琴和純css+html制作手風(fēng)琴兩種效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-04-04
  • 微信小程序生命周期和WXS使用實例詳解

    微信小程序生命周期和WXS使用實例詳解

    微信小程序中的wxs文件,大家或多或少都有見過,下面這篇文章主要給大家介紹了關(guān)于微信小程序生命周期和WXS使用的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • javascript檢查某個元素在數(shù)組中的索引值

    javascript檢查某個元素在數(shù)組中的索引值

    在js中提供數(shù)據(jù)查找了函數(shù)有很多,但我查找了很久都沒有能實現(xiàn)我要的方法,后來發(fā)現(xiàn)可以使用indexOf函數(shù)來實現(xiàn)查找與定位數(shù)組元素索引值的具體方法,各位朋友可參考
    2016-03-03
  • JavaScript動態(tài)添加style節(jié)點的方法

    JavaScript動態(tài)添加style節(jié)點的方法

    這篇文章主要介紹了JavaScript動態(tài)添加style節(jié)點的方法,涉及javascript節(jié)點操作的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • JS按鈕閃爍功能的實現(xiàn)代碼

    JS按鈕閃爍功能的實現(xiàn)代碼

    js按鈕閃爍功能的實現(xiàn)代碼分為html和js兩部分代碼,具體實現(xiàn)代碼大家參考下本文
    2017-07-07
  • 詳解JavaScript的另類寫法

    詳解JavaScript的另類寫法

    這篇文章主要介紹了詳解JavaScript的另類寫法的相關(guān)資料,需要的朋友可以參考下
    2016-04-04

最新評論

尖扎县| 浮山县| 竹山县| 磐石市| 江永县| 新安县| 大田县| 津市市| 大安市| 宁河县| 荃湾区| 济南市| 涞源县| 巴塘县| 老河口市| 隆安县| 电白县| 大新县| 垣曲县| 钟山县| 阜平县| 桃江县| 察隅县| 垦利县| 阿克苏市| 资源县| 房产| 鱼台县| 教育| 朝阳县| 达州市| 贵南县| 马鞍山市| 昌都县| 中卫市| 嘉鱼县| 房产| 大城县| 磐安县| 嵊州市| 桐城市|