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

JavaScript狀態(tài)模式及適配器模式使用講解

 更新時(shí)間:2022年12月30日 10:15:49   作者:volit_  
這篇文章主要介紹了理解JavaScript中的狀態(tài)模式及適配器模式,適配器模式即Adapter Pattern,是作為兩個(gè)不兼容的接口之間的橋梁。這種類(lèi)型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式,下文更多相關(guān)介紹需要的小伙伴可以參考一下

一、狀態(tài)模式

允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)改變時(shí)改變它的行為,對(duì)象看起來(lái)似乎修改了它的類(lèi)

1.基本實(shí)現(xiàn)

//下面以一個(gè)開(kāi)燈程序演示狀態(tài)模式
//燈共用三種狀態(tài),分別是‘關(guān)閉',‘弱光‘和'強(qiáng)光‘。每次按下開(kāi)關(guān)按鈕都會(huì)換擋。
let OfflightState = function (light) {
    this.light = light;
}
OfflightState.prototype.buttonPressed = function () {
    console.light('弱光');
    this.light.setState(this.light.weakLightState);
}
let WeakLightState = function (light) {
    this.light = light;
}
WeakLightState.prototype.buttonPressed = function () {
    console.log('強(qiáng)光')
    this.light.setState(this.light.strongLightState);
}
let StrongLightState = function (light) {
    this.light = light;
}
StrongLightState.prototype.buttonPressed = function () {
    console.log('關(guān)閉');
    this.light.setState(this.light.offlightState)
}
let Light = function () {
    this.offlightState = new OfflightState(this); 
    this.weakLightState = new WeakLightState(this);
    this.strongLightState = new StrongLightState(this);
    this.button = null;
}
Light.prototype.init = function () { 
    let button = document.createElement('button');
    self = this;
    this.button = document.body.appendChild(button);
    this.button.innerHTML = '開(kāi)關(guān)';
    this.button.currState = this.offlightState;
    this.button.onclick = function () { 
        self.currState.buttonPressed;
    }
}
Light.prototype.setState = function (newState) {
    this.currState = newState;
}
let light = new Light();
light.init();

以上代碼實(shí)現(xiàn)了一個(gè)基本的狀態(tài)模式,狀態(tài)的切換規(guī)律事先被定義好在各個(gè)狀態(tài)類(lèi)中,主體上無(wú)需關(guān)心切換的細(xì)節(jié)。如果日后又新增了一個(gè)狀態(tài),那我們只要編寫(xiě)好新的狀態(tài)類(lèi),加入到原有代碼中就可以了。

2.狀態(tài)模式的優(yōu)缺點(diǎn)

(1)狀態(tài)模式定義了狀態(tài)與行為之間的關(guān)系,并將它們封裝在一個(gè)類(lèi)里。通過(guò)增加新的狀態(tài)類(lèi),很容易增加新的狀態(tài)和轉(zhuǎn)換

(2)避免Context無(wú)限膨脹,狀態(tài)切換的邏輯被分布在狀態(tài)類(lèi)中,也去掉了Context中原本過(guò)多的分支。

(3)用對(duì)象代替字符串來(lái)記錄當(dāng)前狀態(tài),使得狀態(tài)的切換更加一目了然。

(4)Context中的請(qǐng)求動(dòng)作和狀態(tài)類(lèi)中封裝的行為可以非常容易地獨(dú)立變化而互不影響。

3.狀態(tài)模式中的性能優(yōu)化點(diǎn)

(1)狀態(tài)可以等待需要的時(shí)候再創(chuàng)建,也可以一開(kāi)始就創(chuàng)建好,具體依據(jù)實(shí)際場(chǎng)景、

(2)state對(duì)象可以在多個(gè)類(lèi)之間共享。

二、適配器模式

解決兩個(gè)軟件實(shí)體間接口不兼容問(wèn)題

適配器模式的應(yīng)用

let googleMap = {
    show: function () {
        console.log('開(kāi)始渲染谷歌地圖');
    }
}
let baiduMap = {
    show: function () {
        console.log('開(kāi)始渲染百度地圖');
    }
}
let renderMap = function (map) {
    map.show();
}
/**
 * 以上代碼段實(shí)現(xiàn)了渲染不同地圖的功能?,F(xiàn)在假設(shè)BaiduMap的api改成了display,修改源代碼勢(shì)必不太符合開(kāi)閉原則,這時(shí)候我們可以通過(guò)新建一個(gè)適配器來(lái)達(dá)到目的
 */
let baiduMapAdapter = {
    show: function () {
        return baiduMap.display();
    }
}
renderMap(baiduMapAdapter);

到此這篇關(guān)于JavaScript狀態(tài)模式及適配器模式使用講解的文章就介紹到這了,更多相關(guān)JavaScript狀態(tài)模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • javascript中驗(yàn)證大寫(xiě)字母、數(shù)字和中文

    javascript中驗(yàn)證大寫(xiě)字母、數(shù)字和中文

    本文為大家介紹下使用javascript驗(yàn)證大寫(xiě)字母小寫(xiě)字母,數(shù)字和中文,具體示例如下
    2014-01-01
  • js 數(shù)組倒序排列的具體實(shí)現(xiàn)

    js 數(shù)組倒序排列的具體實(shí)現(xiàn)

    有時(shí)候需要將數(shù)組類(lèi)型變量?jī)?nèi)的元素顛倒一下順序再輸出,本文就詳細(xì)的介紹一下,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-08-08
  • js前端登錄加密解決方案

    js前端登錄加密解決方案

    項(xiàng)目中需要前端書(shū)寫(xiě)登錄頁(yè)面,用戶(hù)輸入賬號(hào)密碼,本文主要介紹了js前端登錄加密解決方案,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • 基于JavaScript實(shí)現(xiàn)百度搜索框效果

    基于JavaScript實(shí)現(xiàn)百度搜索框效果

    這篇文章主要為大家詳細(xì)介紹了基于JavaScript實(shí)現(xiàn)百度搜索框效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • js跑馬燈代碼(自寫(xiě))

    js跑馬燈代碼(自寫(xiě))

    自己剛寫(xiě)的一個(gè)小程序,寫(xiě)得滿(mǎn)一般的,不過(guò)這個(gè)接口還成,感興趣的朋友可以參考下哈,希望對(duì)你學(xué)習(xí)js知識(shí)有所幫助
    2013-04-04
  • javascript 設(shè)為首頁(yè)與加入收藏兼容多瀏覽器代碼

    javascript 設(shè)為首頁(yè)與加入收藏兼容多瀏覽器代碼

    javascript 設(shè)為首頁(yè)與加入收藏兼容多瀏覽器代碼,不過(guò)由于ie7的特殊性,設(shè)為首頁(yè)不能使用,不過(guò)其它基于ie內(nèi)核的瀏覽器都是支持的。
    2011-01-01
  • js里怎么取select標(biāo)簽里的值并修改

    js里怎么取select標(biāo)簽里的值并修改

    js如何將select標(biāo)簽里的BBB改成XXX,同時(shí)BBB里的valued的值改成F?本文將告訴你正確的答案
    2012-12-12
  • 讓多個(gè)輸入框中的內(nèi)容同時(shí)變化的js代碼

    讓多個(gè)輸入框中的內(nèi)容同時(shí)變化的js代碼

    怎么樣讓多個(gè)輸入框中的內(nèi)容同時(shí)變化?一般又要兼容IE與firefox
    2010-01-01
  • JS無(wú)限級(jí)導(dǎo)航菜單實(shí)現(xiàn)方法

    JS無(wú)限級(jí)導(dǎo)航菜單實(shí)現(xiàn)方法

    今天小編就為大家分享一篇關(guān)于JS無(wú)限級(jí)導(dǎo)航菜單實(shí)現(xiàn)方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • JavaScript DOM 學(xué)習(xí)總結(jié)(五)

    JavaScript DOM 學(xué)習(xí)總結(jié)(五)

    當(dāng)頁(yè)面加載時(shí),瀏覽器會(huì)創(chuàng)建頁(yè)面的文檔對(duì)象模型(Document Object Model)。文檔對(duì)象模型定義訪(fǎng)問(wèn)和處理HTML文檔的標(biāo)準(zhǔn)方法,本篇文章給大家介紹javascript dom 學(xué)習(xí)總結(jié)(五),感興趣的朋友一起學(xué)習(xí)吧
    2015-11-11

最新評(píng)論

龙口市| 田阳县| 水富县| 曲阜市| 长汀县| 民丰县| 荥阳市| 承德市| 顺昌县| 柳州市| 育儿| 剑川县| 南溪县| 收藏| 交城县| 屏东市| 永德县| 威海市| 南漳县| 泰顺县| 泸州市| 保靖县| 通城县| 舟山市| 阳东县| 上虞市| 涿鹿县| 太湖县| 苏尼特左旗| 平武县| 青田县| 河东区| 正定县| 蒙城县| 肇州县| 交口县| 平阳县| 应用必备| 怀柔区| 万载县| 湘潭市|