成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

一天一個設(shè)計模式之JS實現(xiàn)——適配器模式

Aceyclee / 2189人閱讀

摘要:本文參考于設(shè)計模式課程設(shè)計模式之適配器模式設(shè)計模式是一套被反復(fù)使用的多數(shù)人知曉的經(jīng)過分類編目的代碼設(shè)計經(jīng)驗的總結(jié)。第一個設(shè)計模式是適配器模式。總的來說適配器就是的模式,與修飾模式直接無感使用不同,適配器模式使用對象變?yōu)椤?/p>

本文參考于:
設(shè)計模式課程
設(shè)計模式之適配器模式

設(shè)計模式是一套被反復(fù)使用的、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設(shè)計經(jīng)驗的總結(jié)。使用設(shè)計模式是為了重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。 毫無疑問,設(shè)計模式于己于他人于系統(tǒng)都是多贏的,設(shè)計模式使代碼編制真正工程化,設(shè)計模式是軟件工程的基石,如同大廈的一塊塊磚石一樣。項目中合理地運用設(shè)計模式可以完美地解決很多問題,每種模式在現(xiàn)實中都有相應(yīng)的原理來與之對應(yīng),每種模式都描述了一個在我們周圍不斷重復(fù)發(fā)生的問題,以及該問題的核心解決方案,這也是設(shè)計模式能被廣泛應(yīng)用的原因。

設(shè)計模式如此強大,從今天開始,抓住大學(xué)生活的尾巴,我要一天學(xué)習(xí)一個設(shè)計模式啦。

第一個設(shè)計模式是:適配器模式

使用場景:
1 系統(tǒng)需要使用現(xiàn)有的類,而這些類的接口不符合系統(tǒng)的需要。
2 想要建立一個可以重復(fù)使用的類,用于與一些彼此之間沒有太大關(guān)聯(lián)的一些類,包括一些可能在將來引進的類一起工作。
3 需要一個統(tǒng)一的輸出接口,而輸入端的類型不可預(yù)知。
比如插座-充電器-電子設(shè)備的例子。插座輸出的是220V的電壓,而電子設(shè)備充電時只需5V,不然就note7了,這時充電器充當(dāng)適配器,接受插座的220V,輸出5V,從而作為連接器讓電子設(shè)備順利充電。
總的來說適配器就是src-adapter-dist的模式,與修飾模式直接無感使用src不同,適配器模式使用對象變?yōu)閍dapter。
適配器模式不是在系統(tǒng)設(shè)計時所預(yù)期的,是在需求改動、升級的時候動態(tài)添加的,如果一個系統(tǒng)使用過多的適配器,明明調(diào)用的是A接口,卻在適配器內(nèi)部實現(xiàn)的是調(diào)用B接口,導(dǎo)致系統(tǒng)混亂。

適配器模式分為三種:
一、類適配器模式;二、對象適配器模式;三、接口適配器模式(JS沒有抽象類的概念,這里不詳細講述)

接下來舉的例子就是上面插座-充電器-電子設(shè)備的例子。

類適配器

繼承src,實現(xiàn)dist的接口。
先是插座

function Plug() {
    this.V = 220;
}
Plug.prototype.outputVoltage220 = function() {
    return this.V;
};

再是手機

function Phone() {
    this.V = 5;
}
Phone.prototype.charge = function(outputDevice) {
    if (outputDevice.outputVoltage5() === this.V) {
        console.log("充電中...");
    } else {
        console.log("充電異常");
    }
};

現(xiàn)在我們要實現(xiàn)的是outputVoltage5的接口,以對接手機的輸入電壓

function inherit(Sub, Sup) {
    Sub.prototype = Object.create(Sup.prototype);
    Object.defineProperty(Sub.prototype, "constructor", {
        enumerable: false,
        value: Sub
    });
}

function Charger() {
    Plug.call(this);
}
inherit(Charger, Plug);
Charger.prototype.outputVoltage5 = function() {
    return this.outputVoltage220() / 44;
};

這樣充電器就實現(xiàn)了連接插座和手機的功能。

var cg = new Charger();
var mobile = new Phone();
mobile.charge(cg);

小結(jié):類適配器使用繼承的方式實現(xiàn),會暴露src的所有其他方法。

對象適配器

對象適配器和類適配器相差不大,使用組合的方式實現(xiàn)。
持有src,實現(xiàn)dist接口,完成src->dist的適配

function Charger2() {
    this.plug = null;
}
Charger2.prototype.initPlug = function(plug) {
    return this.plug = plug;
};
Charger2.prototype.outputVoltage5 = function() {
    if (!this.plug) {
        console.error("未插電");
        return -1;
    }
    return this.plug.outputVoltage220() / 44;
};

同樣也能正常充電

var plug = new Plug();
var cg2 = new Charger2();
cg2.initPlug(plug);
mobile.charge(cg2);

小結(jié):根據(jù)合成復(fù)用原則,組合優(yōu)于繼承,所以結(jié)構(gòu)型模式一般都是對象結(jié)構(gòu)型模式。

以上表述有什么問題,歡迎大家指出,一起學(xué)習(xí)。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/107640.html

相關(guān)文章

  • Java 23種設(shè)計模式----配器模式

    摘要:適配器模式的結(jié)構(gòu)通過繼承實現(xiàn)通過委讓實現(xiàn)代碼實現(xiàn)目標(biāo)類使用數(shù)據(jù)線適配類使用轉(zhuǎn)適配線主函數(shù)與在適配器模式中的應(yīng)用當(dāng)前,不少公司使用整合進行系統(tǒng)開發(fā)。 Java 23種設(shè)計模式----適配器模式 1、面向?qū)ο驩O = 面向?qū)ο蠓治鯫OA + 面向?qū)ο笤O(shè)計OOD + 面向?qū)ο缶幊蘋OP 2、編程是一門技術(shù)、同時也是一門藝術(shù) 3、應(yīng)該面向接口編程,而不是面向?qū)崿F(xiàn)編程 什么是設(shè)計模式 設(shè)計模式是...

    VincentFF 評論0 收藏0
  • 一天一個設(shè)計模式JS實現(xiàn)——建造者模式

    摘要:參考文章設(shè)計模式之建造者模式一什么是建造者模式建造者模式是將一個復(fù)雜的對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。 參考文章:java設(shè)計模式之建造者模式 一、什么是建造者模式建造者模式:是將一個復(fù)雜的對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。工廠類模式提供的是創(chuàng)建單個類的模式,而建造者模式則是將各種產(chǎn)品集中起來進行管理,用來創(chuàng)建復(fù)合對象,所謂...

    boredream 評論0 收藏0
  • 一天一個設(shè)計模式JS實現(xiàn)——工廠模式

    摘要:參考文章深入理解三種工廠模式工廠模式,工廠方法模式,抽象工廠模式詳解工廠模式是中最常用的設(shè)計模式之一。這種類型的設(shè)計模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式。 參考文章:深入理解java三種工廠模式工廠模式,工廠方法模式,抽象工廠模式 詳解 工廠模式(Factory Pattern)是 Java 中最常用的設(shè)計模式之一。這種類型的設(shè)計模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的...

    Muninn 評論0 收藏0
  • 前端資源收集整理

    摘要:工作原因,最近一年斷斷續(xù)續(xù)寫了一點前端代碼,收集整理了一些資料,和大家共享。 工作原因,最近一年斷斷續(xù)續(xù)寫了一點前端代碼,收集整理了一些資料,和大家共享。 Github版本:Front-End Resource Collection 前端相關(guān)資源匯總 學(xué)習(xí)指導(dǎo) 精華文章 Web前端的路該怎么走?:文章超長,但是干貨超級多,值得反復(fù)精讀! 聽說2017你想寫前端?:適合于已經(jīng)度過了小白階...

    awesome23 評論0 收藏0
  • 前端資源收集整理

    摘要:工作原因,最近一年斷斷續(xù)續(xù)寫了一點前端代碼,收集整理了一些資料,和大家共享。 工作原因,最近一年斷斷續(xù)續(xù)寫了一點前端代碼,收集整理了一些資料,和大家共享。 Github版本:Front-End Resource Collection 前端相關(guān)資源匯總 學(xué)習(xí)指導(dǎo) 精華文章 Web前端的路該怎么走?:文章超長,但是干貨超級多,值得反復(fù)精讀! 聽說2017你想寫前端?:適合于已經(jīng)度過了小白階...

    antyiwei 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<