国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

結(jié)構(gòu)型設(shè)計(jì)模式——外觀模式

這篇具有很好參考價(jià)值的文章主要介紹了結(jié)構(gòu)型設(shè)計(jì)模式——外觀模式。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

外觀模式

有句話說這個(gè)世界就是個(gè)草臺(tái)班子,只不過排面做的好看而已,里面都是一包糠。這句話來形容外觀模式非常準(zhǔn)確,外觀模式又叫門面模式,顧名思義一個(gè)系統(tǒng)我不管你里面有多復(fù)雜有多少屎山代碼,我只要求你提供的接口好用,簡單就行,即門面要有排面!用專業(yè)的話講是一種通過為多個(gè)復(fù)雜的子系統(tǒng)提供一個(gè)一致的接口,而使這些子系統(tǒng)更加容易被訪問的模式。該模式對外有一個(gè)統(tǒng)一接口,外部應(yīng)用程序不用關(guān)心內(nèi)部子系統(tǒng)的具體的細(xì)節(jié),這樣會(huì)大大降低應(yīng)用程序的復(fù)雜度,提高了程序的可維護(hù)性。

外觀(Facade)模式是“迪米特法則”的典型應(yīng)用,還記得這個(gè)“迪米特法則”嗎?如果兩個(gè)軟件實(shí)體無須直接通信,那么就不應(yīng)當(dāng)發(fā)生直接的相互調(diào)用,可以通過第三方轉(zhuǎn)發(fā)該調(diào)用。其目的是降低類之間的耦合度,提高模塊的相對獨(dú)立性。下圖中的系統(tǒng)內(nèi)部是很復(fù)雜的,左邊這個(gè)系統(tǒng)對外的調(diào)用關(guān)系更是很亂的,內(nèi)部的不堪直接暴露給觀眾。而使用外觀模式,則可以設(shè)置一個(gè)門面或者叫做代理對象,統(tǒng)一由這個(gè)門面來對外提供簡單的、整潔的調(diào)用接口。這就是外觀模式!
結(jié)構(gòu)型設(shè)計(jì)模式——外觀模式,技術(shù)提升篇,設(shè)計(jì)模式,外觀模式,結(jié)構(gòu)型外觀模式,外觀,門面模式

外觀(Facade)模式包含以下主要角色:

  • 外觀(Facade,又稱為門面)角色:為多個(gè)子系統(tǒng)對外提供一個(gè)共同的接口。
  • 子系統(tǒng)(Sub System)角色:實(shí)現(xiàn)系統(tǒng)的部分功能,客戶可以通過外觀角色訪問它。

案例

現(xiàn)在流行智能家居,只需要一個(gè)中控平臺(tái)即可操作全屋家具,這個(gè)中控可以是一個(gè)手機(jī)或者一個(gè)智能音箱(小愛同學(xué))。以前我們要開燈需要去找開關(guān)、開空調(diào)電視機(jī)要去找遙控器,很煩也很亂?,F(xiàn)在我們只需要和中控進(jìn)行交互而不需要去對每個(gè)設(shè)備進(jìn)行交互。因此,可以使用外觀模式解決,類圖如下:
結(jié)構(gòu)型設(shè)計(jì)模式——外觀模式,技術(shù)提升篇,設(shè)計(jì)模式,外觀模式,結(jié)構(gòu)型外觀模式,外觀,門面模式

代碼

首先定義各個(gè)電器實(shí)體類如下:

// 定義電視類
public class TV {
    private String name;
    private Boolean state;
    
    public void on(){
        state = true;
        System.out.println("電視被打開");
    }
    public void off(){
        state = false;
        System.out.println("電視被關(guān)閉");
    }
}
// 定義燈類
public class Light {
    private String name;
    private Boolean state;

    public void on(){
        state = true;
        System.out.println("燈被打開");
    }
    public void off(){
        state = false;
        System.out.println("燈被關(guān)閉");
    }

}
// 定義空調(diào)類
public class AirCondition {
    private String name;
    private Boolean state;
    
    public void on(){
        state = true;
        System.out.println("空調(diào)被打開");
    }
    public void off(){
        state = false;
        System.out.println("空調(diào)被關(guān)閉");
    }
}

使用統(tǒng)一的外觀類(門面類)管理電器:

public class ApplicationFacade {
    private Light light;
    private TV tv;
    private AirCondition airCondition;

    public ApplicationFacade() {
        light = new Light();
        tv = new TV();
        airCondition = new AirCondition();
    }

    private void onAll() {
        light.on();
        tv.on();
        airCondition.on();
    }

    private void offAll() {
        light.off();
        tv.off();
        airCondition.off();
    }

    public void say(String msg) {
        switch (msg) {
            case "我回家了":
                onAll();
                break;
            case "我出門了":
                offAll();
                break;
            case "打開電視":
                tv.on();
                break;
            case "關(guān)閉電視":
                tv.off();
                break;
            case "打開空調(diào)":
                airCondition.on();
                break;
            case "關(guān)閉空調(diào)":
                airCondition.off();
                break;
            case "打開燈":
                light.on();
                break;
            case "關(guān)閉燈":
                light.off();
                break;
            default:
                System.out.println("我聽不懂你在說什么");
        }
    }
}

客戶端進(jìn)行調(diào)用測試:

public class Main {
    public static void main(String[] args) {
        ApplicationFacade app = new ApplicationFacade();
        app.say("我回家了");
        app.say("關(guān)閉電視");
        app.say("我出門了");
    }
}

輸出:

燈被打開
電視被打開
空調(diào)被打開
電視被關(guān)閉
燈被關(guān)閉
電視被關(guān)閉
空調(diào)被關(guān)閉

好處

  • 降低了子系統(tǒng)與客戶端之間的耦合度,使得子系統(tǒng)的變化不會(huì)影響調(diào)用它的客戶類。
  • 對客戶屏蔽了子系統(tǒng)組件,減少了客戶處理的對象數(shù)目,并使得子系統(tǒng)使用起來更加容易。

缺點(diǎn)

  • 不符合開閉原則,修改很麻煩

使用場景

  • 對分層結(jié)構(gòu)系統(tǒng)構(gòu)建時(shí),使用外觀模式定義子系統(tǒng)中每層的入口點(diǎn)可以簡化子系統(tǒng)之間的依賴關(guān)系。
  • 當(dāng)一個(gè)復(fù)雜系統(tǒng)的子系統(tǒng)很多時(shí),外觀模式可以為系統(tǒng)設(shè)計(jì)一個(gè)簡單的接口供外界訪問。
  • 當(dāng)客戶端與多個(gè)子系統(tǒng)之間存在很大的聯(lián)系時(shí),引入外觀模式可將它們分離,從而提高子系統(tǒng)的獨(dú)立性和可移植性。

典型案例

Slf4j日志框架是典型的外觀模式(門面模式),它本身并不實(shí)現(xiàn)日志的具體功能,需要結(jié)合log4j、log4j2或者logback等具體日志工具來使用,它只提供統(tǒng)一的調(diào)用接口。如下圖所示:
結(jié)構(gòu)型設(shè)計(jì)模式——外觀模式,技術(shù)提升篇,設(shè)計(jì)模式,外觀模式,結(jié)構(gòu)型外觀模式,外觀,門面模式

參考內(nèi)容:
傳智播客系列設(shè)計(jì)模式筆記
https://www.runoob.com/design-pattern/facade-pattern.html
https://www.bilibili.com/video/BV1aS4y1Y7iP文章來源地址http://www.zghlxwxcb.cn/news/detail-816083.html

到了這里,關(guān)于結(jié)構(gòu)型設(shè)計(jì)模式——外觀模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 設(shè)計(jì)模式--------結(jié)構(gòu)型模式

    設(shè)計(jì)模式--------結(jié)構(gòu)型模式

    結(jié)構(gòu)型模式描述如何將類或?qū)ο蟀茨撤N布局組成更大的結(jié)構(gòu)。它分為類結(jié)構(gòu)型模式和對象結(jié)構(gòu)型模式,前者采用繼承機(jī)制來組織接口和類,后者釆用組合或聚合來組合對象。 由于組合關(guān)系或聚合關(guān)系比繼承關(guān)系耦合度低,滿足“合成復(fù)用原則”,所以對象結(jié)構(gòu)型模式比類結(jié)構(gòu)

    2024年02月13日
    瀏覽(30)
  • 結(jié)構(gòu)型設(shè)計(jì)模式——橋接模式

    結(jié)構(gòu)型設(shè)計(jì)模式——橋接模式

    橋接模式(Bridge pattern): 使用橋接模式通過將實(shí)現(xiàn)和抽象放在兩個(gè)不同的類層次中而使它們可以獨(dú)立改變。 橋接模式 (Bridge) 是一種結(jié)構(gòu)型設(shè)計(jì)模式, 可將 抽象 部分與 實(shí)現(xiàn) 部分 分離 ,使它們都可以獨(dú)立的變化。如果一個(gè)系統(tǒng)需要在構(gòu)件的抽象化角色和具體化角色之間增加更

    2024年02月07日
    瀏覽(34)
  • 設(shè)計(jì)模式之結(jié)構(gòu)型模式

    設(shè)計(jì)模式之結(jié)構(gòu)型模式

    本文已收錄于專欄 《設(shè)計(jì)模式》 ??大話設(shè)計(jì)模式主要分為三部分,第一部分是創(chuàng)建型模式,第二部分是結(jié)構(gòu)型模式,第三部分是行為型模式。至于為什么要分為這三部分,我的理解是創(chuàng)建型是用于創(chuàng)建對象的而結(jié)構(gòu)型是發(fā)生在類與類之間的關(guān)系是比較宏觀的,比如說組合

    2024年02月11日
    瀏覽(24)
  • 設(shè)計(jì)模式之結(jié)構(gòu)型模式---代理模式

    代理模式是一種結(jié)構(gòu)型設(shè)計(jì)模式,它為目標(biāo)對象提供一種代理,以控制對這個(gè)對象的訪問。代理對象在客戶端和目標(biāo)對象之間起到中介的作用,客戶端通過代理類與目標(biāo)對象進(jìn)行交互,而不是直接與目標(biāo)對象進(jìn)行交互。 代理模式的應(yīng)用場景非常廣泛,包括但不限于以下幾種情

    2024年04月17日
    瀏覽(29)
  • 設(shè)計(jì)模式之橋接模式【結(jié)構(gòu)型模式】

    設(shè)計(jì)模式之橋接模式【結(jié)構(gòu)型模式】

    提示:文章寫完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔 學(xué)習(xí)的最大理由是想擺脫平庸,早一天就多一份人生的精彩;遲一天就多一天平庸的困擾。各位小伙伴,如果您: 想系統(tǒng)/深入學(xué)習(xí)某技術(shù)知識點(diǎn)… 一個(gè)人摸索學(xué)習(xí)很難堅(jiān)持,想組團(tuán)高效學(xué)習(xí)… 想寫博

    2024年01月25日
    瀏覽(26)
  • 設(shè)計(jì)模式-結(jié)構(gòu)型模式之橋接模式

    設(shè)計(jì)模式-結(jié)構(gòu)型模式之橋接模式

    設(shè)想如果要繪制矩形、圓形、橢圓、正方形,我們至少需要4個(gè)形狀類,但是如果繪制的圖形需要具有不同的顏色,如紅色、綠色、藍(lán)色等,此時(shí)至少有如下兩種設(shè)計(jì)方案: 第一種設(shè)計(jì)方案是為每一種形狀都提供一套各種顏色的版本。 第二種設(shè)計(jì)方案是根據(jù)實(shí)際需要對形狀和

    2023年04月18日
    瀏覽(28)
  • 設(shè)計(jì)模式—結(jié)構(gòu)型模式之代理模式

    代理模式(Proxy Pattern) ,給某一個(gè)對象提供一個(gè)代理,并由代理對象控制對原對象的引用,對象結(jié)構(gòu)型模式。 比如我們有一個(gè)直播平臺(tái),提供了直播功能,但是如果不進(jìn)行美顏,可能就比較冷清。所以美顏功能就是我們的增強(qiáng),可以用靜態(tài)代理來實(shí)現(xiàn)。 直播接口: 直播類: 如果

    2024年02月05日
    瀏覽(27)
  • 設(shè)計(jì)模式—結(jié)構(gòu)型模式之橋接模式

    將抽象與實(shí)現(xiàn)解耦,使兩者都可以獨(dú)立變化。 在現(xiàn)實(shí)生活中,某些類具有兩個(gè)或多個(gè)維度的變化,如圖形既可按形狀分,又可按顏色分。如何設(shè)計(jì)類似于 Photoshop 這樣的軟件,能畫不同形狀和不同顏色的圖形呢?如果用繼承方式,m 種形狀和 n 種顏色的圖形就有 m×n 種,不但

    2024年02月05日
    瀏覽(26)
  • 設(shè)計(jì)模式結(jié)構(gòu)型——享元模式

    設(shè)計(jì)模式結(jié)構(gòu)型——享元模式

    目錄 什么是享元模式 享元模式的實(shí)現(xiàn) 享元模式角色 享元模式類圖 享元模式代碼實(shí)現(xiàn) 享元模式的特點(diǎn) 優(yōu)點(diǎn) 缺點(diǎn) 使用場景 注意事項(xiàng) ????????享元模式(Flyweight Pattern)是一種結(jié)構(gòu)型設(shè)計(jì)模式,享元模式中的“享元”指被共享的單元,享元模式通過復(fù)用對象,以達(dá)到節(jié)省

    2024年02月16日
    瀏覽(25)
  • 設(shè)計(jì)模式【結(jié)構(gòu)型】-- 裝飾者模式

    設(shè)計(jì)模式【結(jié)構(gòu)型】-- 裝飾者模式

    裝飾者模式是一種 結(jié)構(gòu)型設(shè)計(jì)模式 ,它允許你動(dòng)態(tài)地將新功能添加到對象中,通過將對象放入包含這些功能的特殊包裝器對象中。這樣一來,你可以在運(yùn)行時(shí)通過組合不同的對象來擴(kuò)展功能,而不是通過繼承修改代碼。 大白話 : 裝飾模式,是指在不改變原有對象的基礎(chǔ)上

    2024年02月16日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包