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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

門(mén)面模式通用代碼實(shí)現(xiàn)

科技綠洲 ? 來(lái)源:Java技術(shù)指北 ? 作者:Java技術(shù)指北 ? 2023-10-09 11:04 ? 次閱讀

1、什么是門(mén)面模式?

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.

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

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

2、門(mén)面模式定義

圖片

①、Facade 門(mén)面角色

此角色知曉子系統(tǒng)的所有功能和責(zé)任,客戶端可以調(diào)用這個(gè)角色的方法,會(huì)將所有從客戶端發(fā)來(lái)的請(qǐng)求委派到相應(yīng)的子系統(tǒng)去, 也就說(shuō)該角色沒(méi)有實(shí)際的業(yè)務(wù)邏輯, 只是一個(gè)委托類。

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

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

3、門(mén)面模式通用代碼實(shí)現(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方法");
    }
}
/**
 * 門(mén)面角色
 */
public class Facade {
    private ClassA a = new ClassA();
    private ClassB b = new ClassB();
    private ClassC c= new ClassC();

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

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

4、門(mén)面模式優(yōu)點(diǎn)

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

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

②、提高安全性

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

5、門(mén)面模式應(yīng)用場(chǎng)景

①、解決易用性問(wèn)題

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

②、解決性能問(wèn)題

通過(guò)將多個(gè)接口調(diào)用替換為一個(gè)門(mén)面接口調(diào)用,減少網(wǎng)絡(luò)通信成本,提高客戶端的響應(yīng)速度。

③、解決分布式事務(wù)問(wèn)題

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

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

適配器模式:主要做接口轉(zhuǎn)換,解決的是原接口和目標(biāo)接口不匹配的問(wèn)題。門(mén)面模式:主要做接口整合,解決的是多接口調(diào)用帶來(lái)的問(wèn)題。

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

    關(guān)注

    33

    文章

    8257

    瀏覽量

    149955
  • 通信
    +關(guān)注

    關(guān)注

    18

    文章

    5880

    瀏覽量

    135316
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4671

    瀏覽量

    67767
  • 客戶端
    +關(guān)注

    關(guān)注

    1

    文章

    287

    瀏覽量

    16604
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

    用C語(yǔ)言實(shí)現(xiàn)狀態(tài)機(jī)設(shè)計(jì)模式

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

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

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

    菜鳥(niǎo)福音|自動(dòng)代碼生成工具——Dev SDk通用平臺(tái)

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

    通用網(wǎng)絡(luò)測(cè)控系統(tǒng)硬件設(shè)計(jì)如何實(shí)現(xiàn)?

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

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

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

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

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

    SPI的幾種模式通用嗎?

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

    設(shè)計(jì)模式的原則及實(shí)現(xiàn)代碼的復(fù)用

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

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

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

    代碼重用攻擊的通用模型及描述語(yǔ)言

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

    大話設(shè)計(jì)模式代碼下載

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

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

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

    PWR休眠模式代碼示例

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

    設(shè)計(jì)模式結(jié)構(gòu)性:門(mén)面模式

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