av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

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

瀏覽:77日期:2023-11-02 15:34:33

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

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

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

場(chǎng)景:在很多情況下我們的頁(yè)面需要做一些狀態(tài)判斷,是否注冊(cè),是否登錄,剩余金額是否大于500等等,我們通常是在組件中通過(guò)if…else…來(lái)做不同的處理,這種方式耦合嚴(yán)重不滿足單一職責(zé)原則。如何解決這個(gè)問(wèn)題呢,這一節(jié)我們利用狀態(tài)模式來(lái)解決對(duì)象的狀態(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('對(duì)Dialog設(shè)置顯示狀態(tài):'); dialog.setState(this); } this.toString = function(){ console.log('顯示中......'); }} var HideState = function(){ this.doAction = function(dialog){ console.log('對(duì)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);//對(duì)Dialog設(shè)置顯示狀態(tài):dialog.getState().toString();//顯示中......hideState.doAction(dialog);//對(duì)Dialog設(shè)置隱藏狀態(tài)dialog.getState().toString();//已隱藏......

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

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

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

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

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

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

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

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

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 大尺度做爰呻吟舌吻网站 | 精品一区二区三区三区 | 国产三级在线免费观看 | 国产高清视频在线播放 | av大片在线观看 | 成人欧美激情 | 波多野结衣一区二区三区在线观看 | 精品一区在线播放 | 91成年人 | 99超碰在线观看 | 黄色三级av | 成人羞羞国产免费 | 日韩精品片 | 日韩欧美黄色片 | 在线观看的av网站 | 亚洲日本视频 | 国产一级黄色大片 | 天海翼一区二区 | 18成人免费观看网站 | 亚洲成人一区二区 | 欧美日韩免费一区二区三区 | 色av导航 | 亚洲综合三区 | 欧美狠狠操 | 天堂在线中文资源 | www.日韩.com| 亚色视频 | 美女毛片视频 | 欧美日韩精品在线观看 | 日韩伦理在线播放 | 国产精品一级二级 | 婷婷综合激情 | 亚洲综合激情网 | 欧美美女一区二区 | 日韩不卡一区 | 伊人av在线 | 在线观看二区 | 日韩中文字幕精品 | 又色又爽又黄18网站 | 日韩一级在线 | 93久久精品日日躁夜夜躁欧美 |