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

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

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

目錄

什么是外觀模式

外觀模式的實現(xiàn)

外觀模式角色

外觀模式舉例

外觀模式類圖

外觀模式代碼實現(xiàn)

外觀模式的特點

優(yōu)點

缺點

注意事項

應用場景

總結(jié)


什么是外觀模式

????????外觀模式(Facade Pattern):又叫作門面模式,歸屬于結(jié)構(gòu)型模式。外觀模式定義了提供了定義了一個統(tǒng)一的高層接口,即為子系統(tǒng)中的一組接口提供一個一致的訪問入口,使子系統(tǒng)更容易被外部程序統(tǒng)一調(diào)用。外部應用程序不用關心內(nèi)部子系統(tǒng)的具體細節(jié),這樣會大大降低應用程序的復雜度,提高了程序的可維護性。

????????外觀模式是為了解決類與類之家的依賴關系的,像spring一樣,可以將類和類之間的關系配置到配置文件中,而外觀模式就是將他們的關系放在一個Facade類中,降低了類類之間的耦合度。

外觀模式的實現(xiàn)

外觀模式角色

  1. 外觀角色(Facade):為多個子系統(tǒng)對外提供一個共同的接口,知道哪些子系統(tǒng)負責處理請求,將客戶端的請求轉(zhuǎn)發(fā)給適當?shù)淖酉到y(tǒng)對象。
  2. 子系統(tǒng)角色(Sub System):實現(xiàn)子系統(tǒng)的功能,處理外觀角色指派的任務。客戶可以通過外觀角色訪問它。子系統(tǒng)在整個系統(tǒng)中可以是一個或多個模塊,每個模塊都有若干類組成,這些類可能相互之間有著比較復雜的關系。
  3. 客戶角色(Client):調(diào)用外觀角色訪問各個子系統(tǒng)的功能。

外觀模式舉例

????????舉個例子: 比如去圖書館借書, 但圖書館很大不知道所要的東西在哪里. 于是就去問圖書館管理員, 圖書館管理員會馬上找到你所要的圖書. 這里面我們不用了解圖書館圖書的擺放, 直接找圖書館管理員即可. 圖書館管理員這里就是門面, 圖書的擺放就是內(nèi)部構(gòu)造.

????????這里你代表客戶角色,圖書代表子系統(tǒng)角色,圖書館管理員代表外觀角色。

外觀模式類圖

設計模式結(jié)構(gòu)型——外觀模式,設計模式,設計模式,外觀模式

外觀模式代碼實現(xiàn)

? ? ? ??舉個例子,一美女下班回家,第一件開門,然后是開燈,然后打開空調(diào),打開熱水器,躺在沙發(fā)上準備看電視。在智能家居的場景,所有電器都綁定啦小愛同學上,其他遙控我們無需關注,只需要關注小愛同學就好啦。這個時候我們就可以使用外觀模式。
????????其中:美女屬于客戶角色,小愛同學屬于外觀角色,智能門鎖,電燈,空調(diào),熱水器,電視屬于子系統(tǒng)角色。

子系統(tǒng)角色

package com.common.demo.pattern.facade;

/**
 * @author Evan Walker https://www.ayshuju.com
 * @version 1.0
 * @desc 門鎖 子系統(tǒng)角色
 * @date 2023/07/20 11:05:13
 */
public class Lock {

    public void open(){
        System.out.println("打開門鎖>>>>>>門鎖已打開!");
    }
}
package com.common.demo.pattern.facade;

/**
 * @author Evan Walker https://www.ayshuju.com
 * @version 1.0
 * @desc 電燈 子系統(tǒng)角色
 * @date 2023/07/20 11:03:03
 */
public class Light {

    public void open(){
        System.out.println("打開電燈>>>>>>電燈已打開!");
    }
}
package com.common.demo.pattern.facade;

/**
 * @author Evan Walker  https://www.ayshuju.com
 * @version 1.0
 * @desc 空調(diào) 子系統(tǒng)角色
 * @date 2023/07/20 11:07:38
 */
public class AirConditioner {

    public void open(){
        System.out.println("打開空調(diào)>>>>>>空調(diào)已打開!");
    }
}
package com.common.demo.pattern.facade;

/**
 * @author Evan Walker  https://www.ayshuju.com
 * @version 1.0
 * @desc 熱水器 子系統(tǒng)角色
 * @date 2023/07/20 11:03:53
 */
public class Heater {

    public void open(){
        System.out.println("打開熱水器>>>>>>熱水器已打開!");
    }
}
package com.common.demo.pattern.facade;

/**
 * @author Evan Walker https://www.ayshuju.com
 * @version 1.0
 * @desc 電視 子系統(tǒng)角色
 * @date 2023/07/20 11:06:04
 */
public class Tv {

    public void open(){
        System.out.println("打開電視>>>>>>電視已打開!");
    }
}

外觀角色

package com.common.demo.pattern.facade;

/**
 * @author Evan Walker  https://www.ayshuju.com
 * @version 1.0
 * @desc 外觀角色
 * @date 2023/07/20 10:59:00
 */
public class Facade {

    private AirConditioner airConditioner;
    private Tv tv;
    private Lock lock;
    private Light light;
    private Heater heater;

    public Facade(){
        this.airConditioner = new AirConditioner();
        this.tv = new Tv();
        this.light = new Light();
        this.lock = new Lock();
        this.heater = new Heater();
    }

    public void goHome(){
        lock.open();
        light.open();
        airConditioner.open();
        heater.open();
        tv.open();
    }

}

客戶角色

package com.common.demo.pattern.facade;

/**
 * @author Evan Walker  https://www.ayshuju.com
 * @version 1.0
 * @desc 客戶角色
 * @date 2023/07/20 10:59:15
 */
public class Client {

    public static void main(String[] args) {
        Facade facade = new Facade();
        facade.goHome();
    }
}

運行測試截圖

設計模式結(jié)構(gòu)型——外觀模式,設計模式,設計模式,外觀模式

外觀模式的特點

優(yōu)點

  1. 減少相互依賴:實現(xiàn)了子系統(tǒng)與客戶之間的松耦合關系,子系統(tǒng)的組件變化不會影響到調(diào)用它的客戶類,只需調(diào)整外觀類即可。
  2. 提高靈活性:對客戶屏蔽子系統(tǒng)組件,減少了客戶處理的對象數(shù)目,客戶代碼使用子系統(tǒng)使用起來更加容易。但并不妨礙客戶直接訪問子系統(tǒng)。
  3. 提高安全性:更好地劃分訪問層次。
  4. 迪米特法則:遵循迪米特法則,即最少知道原則。

缺點

  1. 當增加子系統(tǒng)和擴展系統(tǒng)行為時,可能容易帶來未知風險。
  2. 不能很好地限制客戶使用子系統(tǒng)類,如果對客戶訪問子系統(tǒng)類做太多的限制則減少了可變性和靈活性。
  3. 在不引入抽象外觀類的情況下,增加新的子系統(tǒng)可能需要修改外觀類或客戶端的源代碼,違背了“開閉原則”。
  4. 某些情況下可能違背單一職責原則。

注意事項

  1. 在層次化結(jié)構(gòu)中,可使用外觀模式定義系統(tǒng)中每一層的入口。
  2. 一個系統(tǒng)有多個外觀類,在一個系統(tǒng)中可以設計多個外觀類,每個外觀類都負責和一些特定的子系統(tǒng)交互,向用戶提供相應的業(yè)務功能。
  3. 不要試圖通過外觀類為子系統(tǒng)增加新行為,外觀模式的用意是為子系統(tǒng)提供一個集中化和簡化的溝通渠道,而不是向子系統(tǒng)加入新的行為,新的行為的增加應該通過修改原有子系統(tǒng)類或增加新的子系統(tǒng)類來實現(xiàn),不能通過外觀類來實現(xiàn)。
  4. 外觀模式創(chuàng)造出一個外觀對象,將客戶端所涉及的屬于一個子系統(tǒng)的協(xié)作伙伴的數(shù)量減到最少,使得客戶端與子系統(tǒng)內(nèi)部的對象的相互作用被外觀對象所取代。外觀類充當了客戶類與子系統(tǒng)類之間的“第三者”,降低了客戶類與子系統(tǒng)類之間的耦合度,外觀模式就是實現(xiàn)代碼重構(gòu)以便達到“迪米特法則”要求的一個強有力的武器。
  5. 外觀模式最大的缺點在于違背了“開閉原則”,當增加新的子系統(tǒng)或者移除子系統(tǒng)時需要修改外觀類,可以通過引入抽象外觀類在一定程度上解決該問題,客戶端針對抽象外觀類進行編程。對于新的業(yè)務需求,不修改原有外觀類,而對應增加一個新的具體外觀類,由新的具體外觀類來關聯(lián)新的子系統(tǒng)對象,同時通過修改配置文件來達到不修改源代碼并更換外觀類的目的。

應用場景

  1. 減少對子系統(tǒng)的依賴性
  2. 子系統(tǒng)相對獨立且越來越復雜,增加門面模式提供接口
  3. 構(gòu)建多層系統(tǒng)結(jié)構(gòu),利用門面對象作為每層的入口,簡化層間調(diào)用

總結(jié)

  1. 外觀模式對客戶端與子系統(tǒng)的耦合關系,讓子系統(tǒng)內(nèi)部的模塊更易維護和擴展。對外屏蔽了子系統(tǒng)的細節(jié),因此外觀模式降低了客戶端對子系統(tǒng)使用的復雜性。當系統(tǒng)需要進行分層設計時,可以考慮外觀模式幫我們更好的劃分訪問的層次。

更多消息資訊,請訪問昂焱數(shù)據(jù)(https://www.ayshuju.com)文章來源地址http://www.zghlxwxcb.cn/news/detail-600055.html

到了這里,關于設計模式結(jié)構(gòu)型——外觀模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

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

    設計模式--------結(jié)構(gòu)型模式

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

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

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

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

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

    設計模式之結(jié)構(gòu)型模式

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

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

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

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

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

    2024年02月05日
    瀏覽(26)
  • 設計模式之結(jié)構(gòu)型模式---代理模式

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

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

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

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

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

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

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

    2023年04月18日
    瀏覽(27)
  • 設計模式【結(jié)構(gòu)型】-- 裝飾者模式

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

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

    2024年02月16日
    瀏覽(29)
  • 設計模式結(jié)構(gòu)型——享元模式

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

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

    2024年02月16日
    瀏覽(25)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包