0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

門面模式通用代碼實現(xiàn)

科技綠洲 ? 來源:Java技術指北 ? 作者:Java技術指北 ? 2023-10-09 11:04 ? 次閱讀

1、什么是門面模式?

Provide a unified interface to a set of interfaces in a subsystem.Facade defines a higher-level interface that makes the subsystem easier to use.

門面模式(Facade Pattern):也叫外觀模式,要求一個子系統(tǒng)的外部與其內部的通信必須通過一個統(tǒng)一的對象進行。門面模式提供一個高層次的接口,使得子系統(tǒng)更易于使用。

說人話:假設有一個系統(tǒng) A,提供了 a、b、c、d 四個接口。系統(tǒng) B 完成某個業(yè)務功能,需要調用 A 系統(tǒng)的 a、b、d 接口。利用門面模式,我們提供一個包裹 a、b、d 接口調用的門面接口 x,給系統(tǒng) B 直接使用。至于為什么要這樣做,下文會告訴你。

2、門面模式定義

圖片

①、Facade 門面角色

此角色知曉子系統(tǒng)的所有功能和責任,客戶端可以調用這個角色的方法,會將所有從客戶端發(fā)來的請求委派到相應的子系統(tǒng)去, 也就說該角色沒有實際的業(yè)務邏輯, 只是一個委托類。

②、Subsystem 子系統(tǒng)角色

可以同時有一個或者多個子系統(tǒng)。每一個子系統(tǒng)都不是一個單獨的類, 而是一個類的集合。子系統(tǒng)并不知道門面的存在。對于子系統(tǒng)而言, 門面僅僅是另外一個客戶端而已。

3、門面模式通用代碼實現(xiàn)

/**
 * 子系統(tǒng)A
 */
public class ClassA {
    public void doA(){
        System.out.println("子系統(tǒng)A方法");
    }
}
/**
 * 子系統(tǒng)B
 */
public class ClassB {
    public void doB(){
        System.out.println("子系統(tǒng)B方法");
    }
}
/**
 * 子系統(tǒng)C
 */
public class ClassC {
    public void doC(){
        System.out.println("子系統(tǒng)C方法");
    }
}
/**
 * 門面角色
 */
public class Facade {
    private ClassA a = new ClassA();
    private ClassB b = new ClassB();
    private ClassC c= new ClassC();

    // 提供給外部訪問的方法
    public void doSomething(){
        this.a.doA();
        this.b.doB();
        this.c.doC();
    }
}

看上去,沒有門面角色,我們自己去調用三個子系統(tǒng)的方法也是一樣,但是假如三個子系統(tǒng)之間有先后順序,還有來自不同網絡開銷,我們通過門面模式提供的方法,就屏蔽了這些差異,讓我們只需要調用門面角色提供給我們的方法即可。

4、門面模式優(yōu)點

①、減少系統(tǒng)的相互依賴

如果我們不使用門面模式, 外界訪問直接深入到子系統(tǒng)內部, 相互之間是一種強耦合關系, 你死我就死, 你活我才能活, 這樣的強依賴是系統(tǒng)設計所不能接受的, 門面模式的出現(xiàn)就很好地解決了該問題, 所有的依賴都是對門面對象的依賴, 與子系統(tǒng)無關。

②、提高安全性

想讓你訪問子系統(tǒng)的哪些業(yè)務就開通哪些邏輯, 不在門面上開通的方法, 你休想訪問到。

5、門面模式應用場景

①、解決易用性問題

門面模式可以用來封裝系統(tǒng)的底層實現(xiàn),隱藏系統(tǒng)的復雜性,提供一組更加簡單易用、更高層的接口。

②、解決性能問題

通過將多個接口調用替換為一個門面接口調用,減少網絡通信成本,提高客戶端的響應速度。

③、解決分布式事務問題

需要調用多個子系統(tǒng)的接口方法,而這些接口要么都成功,要么都失敗,我們就可以利用門面模式包裹這些子系統(tǒng)接口,然后通過某種方法保證這些接口在一個事務中完成。

6、適配器模式和門面模式區(qū)別

適配器模式:主要做接口轉換,解決的是原接口和目標接口不匹配的問題。門面模式:主要做接口整合,解決的是多接口調用帶來的問題。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 接口
    +關注

    關注

    33

    文章

    8381

    瀏覽量

    150580
  • 通信
    +關注

    關注

    18

    文章

    5931

    瀏覽量

    135720
  • 代碼
    +關注

    關注

    30

    文章

    4700

    瀏覽量

    68117
  • 客戶端
    +關注

    關注

    1

    文章

    287

    瀏覽量

    16629
收藏 人收藏

    評論

    相關推薦

    實現(xiàn)TCP的C代碼封裝(含代碼

    實現(xiàn)TCP的C代碼封裝(含代碼
    的頭像 發(fā)表于 09-28 16:03 ?2391次閱讀
    <b class='flag-5'>實現(xiàn)</b>TCP的C<b class='flag-5'>代碼</b>封裝(含<b class='flag-5'>代碼</b>)

    用C語言實現(xiàn)狀態(tài)機設計模式

    狀態(tài)機模式是一種行為模式,在《設計模式》這本書中對其有詳細的描述,通過多態(tài)實現(xiàn)不同狀態(tài)的調轉行為的確是一種很好的方法,只可惜在嵌入式環(huán)境下,有時只能寫純C
    發(fā)表于 12-14 13:38 ?2785次閱讀

    利用Swap模式實現(xiàn)代碼回滾操作

    前面介紹了MCUboot的基礎知識,您可通過上方鏈接回顧歷史文章,上次介紹了Swap模式,本次著重介紹利用Swap模式實現(xiàn)代碼回滾操作。在某些應用場景中,可能新版本的Firmware存在bug而需要返回至上一次的固件。
    的頭像 發(fā)表于 06-19 15:45 ?1080次閱讀
    利用Swap<b class='flag-5'>模式</b><b class='flag-5'>實現(xiàn)代碼</b>回滾操作

    菜鳥福音|自動代碼生成工具——Dev SDk通用平臺

    ,可以將我們生成好的 通用平臺版代碼 移植到符合條件的平臺,從而實現(xiàn)機智云所提供的各種功能。本文將主要說明 通用平臺版 的移植。2.如何自動生成"
    發(fā)表于 12-20 17:07

    通用網絡測控系統(tǒng)硬件設計如何實現(xiàn)?

    )基本都不支持網絡,也不能簡單升級具有網絡功能,且模式較為單一。因而,設計與實現(xiàn)了一種網絡化通用測控系統(tǒng)平臺,以實現(xiàn)網絡化測控需求且具有一般平臺的
    發(fā)表于 11-08 07:45

    GPIO模式與GPIO配置代碼實現(xiàn)

    選擇三、GPIO配置代碼實現(xiàn)四、總工程實現(xiàn)一、GPIO模式STM32的 GPIO模式有以下幾種: GPIO_Mode_AIN --模擬輸入G
    發(fā)表于 08-24 07:20

    怎樣去實現(xiàn)STM32通用定時器的輸出比較模式

    怎樣去實現(xiàn)STM32通用定時器的輸出比較模式呢?其代碼該怎樣去實現(xiàn)呢?
    發(fā)表于 11-24 07:44

    SPI的幾種模式通用嗎?

    SPI的幾種模式通用
    發(fā)表于 10-10 08:15

    設計模式的原則及實現(xiàn)代碼的復用

    for modification。 意思:軟件模塊應該對擴展開放,對修改關閉。 舉例:在程序需要進行新增功能的時候,不能去修改原有的代碼,而是新增代碼,實現(xiàn)一個熱插拔的效果(熱插拔:靈活的去除或添加功能,不影響到原有的
    發(fā)表于 09-26 15:12 ?0次下載

    DSP系統(tǒng)通用設計模式及其實現(xiàn)   

    的軟硬件擴展性。本文介紹的這種基于視頻處理的DSP系統(tǒng)的框架正是以傳統(tǒng)的數(shù)字信號處理方式為基礎,以高效性和擴展性為目標,并且能夠適應大多數(shù)的器件而提出的在硬件上和在軟件上的解決方案。 可通用設計模式的思路 硬件結構 傳統(tǒng)的數(shù)字信
    發(fā)表于 10-20 09:18 ?0次下載
    DSP系統(tǒng)<b class='flag-5'>通用</b>設計<b class='flag-5'>模式</b>及其<b class='flag-5'>實現(xiàn)</b>   

    代碼重用攻擊的通用模型及描述語言

    由于代碼重用攻擊的方式方法多樣,相應的 gadget在結構上也不盡相同,目前尚沒有一種通用的方法能夠用來描述多種代碼重用攻擊下的 gadget。結合幾種常見代碼重用攻擊的攻擊模型和圖靈
    發(fā)表于 05-29 16:29 ?5次下載

    大話設計模式代碼下載

    大話設計模式代碼下載
    發(fā)表于 07-22 10:50 ?6次下載

    STM32 低功耗睡眠模式(SLEEP)事件(EVENT)喚醒實現(xiàn)及優(yōu)化

    和STM32CUBEIDE環(huán)境介紹睡眠模式(SLEEP)事件喚醒的實現(xiàn)(HAL庫)。這里以管腳中斷為中斷源。SLEEP模式只是停止CPU和后續(xù)代碼執(zhí)行,喚醒(其實是continue的作
    發(fā)表于 12-31 19:08 ?34次下載
    STM32 低功耗睡眠<b class='flag-5'>模式</b>(SLEEP)事件(EVENT)喚醒<b class='flag-5'>實現(xiàn)</b>及優(yōu)化

    PWR休眠模式代碼示例

    進入睡眠模式的功能。 /* 無限循環(huán) */ /* USER CODE BEGIN WHILE */while?( 1 ) { /* USER CODE END WHILE */ /* 用戶代碼開始 3 */ ? ? HAL_延遲(1000 ); ? ?HAL_Suspen
    發(fā)表于 03-23 14:32 ?556次閱讀
    PWR休眠<b class='flag-5'>模式</b>和<b class='flag-5'>代碼</b>示例

    設計模式結構性:門面模式

    門面模式,是指提供一個統(tǒng)一的接口去訪問多個子系統(tǒng)的多個不同的接口,它為子系統(tǒng)中的一組接口提供一個統(tǒng)一的高層接口。
    的頭像 發(fā)表于 06-08 14:28 ?632次閱讀
    設計<b class='flag-5'>模式</b>結構性:<b class='flag-5'>門面</b><b class='flag-5'>模式</b>