欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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ù)雜對(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)重不滿(mǎ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稱(chēng)之為環(huán)境類(lèi),環(huán)境類(lèi)又稱(chēng)為上下文類(lèi),他擁有多種狀態(tài)。環(huán)境類(lèi)內(nèi)部需要維護(hù)一個(gè)state對(duì)象用來(lái)定義當(dāng)前狀態(tài)。HideState,ShowState稱(chēng)之為狀態(tài)類(lèi),對(duì)應(yīng)環(huán)境類(lèi)的一個(gè)具體狀態(tài),toString稱(chēng)之為狀態(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ì)象的行為依賴(lài)于它的狀態(tài),狀態(tài)改變將導(dǎo)致行為的變化
* 在代碼中包含大量與對(duì)象狀態(tài)有關(guān)的條件語(yǔ)句

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

更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《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ì)有所幫助。

相關(guān)文章

  • 淺談微信頁(yè)面入口文件被緩存解決方案

    淺談微信頁(yè)面入口文件被緩存解決方案

    緩存對(duì)于前端頁(yè)面來(lái)說(shuō),是加速頁(yè)面加載的利器之一,但也同時(shí)帶來(lái)了很多問(wèn)題,這篇文章主要介紹了淺談微信頁(yè)面入口文件被緩存解決方案,感興趣的小伙伴們可以參考一下
    2018-09-09
  • 老生常談js中0到底是 true 還是 false

    老生常談js中0到底是 true 還是 false

    下面小編就為大家?guī)?lái)一篇老生常談js中0到底是 true 還是 false。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • JavaScript實(shí)現(xiàn)將xml轉(zhuǎn)換成html table表格的方法

    JavaScript實(shí)現(xiàn)將xml轉(zhuǎn)換成html table表格的方法

    這篇文章主要介紹了JavaScript實(shí)現(xiàn)將xml轉(zhuǎn)換成html table表格的方法,實(shí)例分析了javascript操作XML文件與table表格的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • JavaScript 替換所有匹配內(nèi)容及正則替換方法

    JavaScript 替換所有匹配內(nèi)容及正則替換方法

    這篇文章主要介紹了JavaScript 替換所有匹配內(nèi)容,文中給大家提到了使用正則表達(dá)式替換方法,通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2020-02-02
  • JavaScript使用localStorage存儲(chǔ)數(shù)據(jù)

    JavaScript使用localStorage存儲(chǔ)數(shù)據(jù)

    這篇文章主要為大家詳細(xì)介紹了JavaScript使用localStorage存儲(chǔ)數(shù)據(jù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • 用vbs實(shí)現(xiàn)的連連看在線(xiàn)游戲

    用vbs實(shí)現(xiàn)的連連看在線(xiàn)游戲

    大家可以參考下代碼,發(fā)現(xiàn)這個(gè)真?zhèn)€不錯(cuò)的思路
    2008-07-07
  • js常用方法示例梳理(總結(jié)篇)

    js常用方法示例梳理(總結(jié)篇)

    這篇文章主要為大家介紹了js常用的方法示例梳理總結(jié)及功能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • js讓一行頁(yè)腳保持在底部

    js讓一行頁(yè)腳保持在底部

    所謂保持在底部就是: 在內(nèi)容不超過(guò)一屏的情況下, 當(dāng)瀏覽器窗口變小那行頁(yè)腳文字會(huì)跟著向上浮動(dòng)但還是保持在底部。當(dāng)內(nèi)容多出一屏?xí)r,他顯示在網(wǎng)頁(yè)的最下邊,而不是窗口的最下邊;
    2008-04-04
  • javascript RadioButtonList獲取選中值

    javascript RadioButtonList獲取選中值

    js獲取RadioButtonList值的代碼。
    2009-04-04
  • html5+javascript實(shí)現(xiàn)簡(jiǎn)單上傳的注意細(xì)節(jié)

    html5+javascript實(shí)現(xiàn)簡(jiǎn)單上傳的注意細(xì)節(jié)

    這篇文章主要為大家詳細(xì)介紹了html5+javascript實(shí)現(xiàn)上傳操作的注意細(xì)節(jié),form表單樣式不美觀等細(xì)節(jié)問(wèn)題,感興趣的小伙伴們可以參考一下
    2016-04-04

最新評(píng)論