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

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

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

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

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

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

場景:在很多情況下我們的頁面需要做一些狀態(tài)判斷,是否注冊,是否登錄,剩余金額是否大于500等等,我們通常是在組件中通過if…else…來做不同的處理,這種方式耦合嚴(yán)重不滿足單一職責(zé)原則。如何解決這個(gè)問題呢,這一節(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();
//已隱藏......

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

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

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

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

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

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

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    JavaScript動(dòng)態(tài)添加style節(jié)點(diǎn)的方法

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

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

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

    詳解JavaScript的另類寫法

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

最新評論

芦溪县| 康乐县| 清镇市| 建瓯市| 达日县| 平原县| 富川| 津市市| 军事| 桐乡市| 会昌县| 顺义区| 夏邑县| 宁强县| 长岭县| 磐石市| 延边| 昭觉县| 绥滨县| 镶黄旗| 砚山县| 赣榆县| 修水县| 黄山市| 红原县| 衡阳县| 囊谦县| 大厂| 鄂托克旗| 玛曲县| 铜陵市| 肃宁县| 汉寿县| 嘉善县| 桓仁| 林芝县| 长顺县| 拉孜县| 新泰市| 永吉县| 隆回县|