最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java設(shè)計(jì)模式中的門(mén)面模式詳解

 更新時(shí)間:2022年09月22日 14:47:52   作者:丨Jack_Chen丨  
門(mén)面模式又叫外觀模式(Facade Pattern),主要用于隱藏系統(tǒng)的復(fù)雜性,并向客戶端提供了一個(gè)客戶端可以訪問(wèn)系統(tǒng)的接口,本文通過(guò)實(shí)例代碼給大家介紹下java門(mén)面模式的相關(guān)知識(shí),感興趣的朋友一起看看吧

門(mén)面模式

概述

門(mén)面模式(Facade Pattern)又叫外觀模式,屬于結(jié)構(gòu)性模式。

它提供一個(gè)統(tǒng)一的接口去訪問(wèn)多個(gè)子系統(tǒng)的多個(gè)不同的接口,它為子系統(tǒng)中的一組接口提供一個(gè)統(tǒng)一的高層接口。使得子系統(tǒng)更容易使用。

客戶端不需要知道系統(tǒng)內(nèi)部的復(fù)雜聯(lián)系,只需定義系統(tǒng)的入口。即在客戶端和復(fù)雜系統(tǒng)之間再加一層,這一層將調(diào)用順序、依賴關(guān)系等處理好。

應(yīng)用場(chǎng)景

為復(fù)雜的模塊或子系統(tǒng)提供外界訪問(wèn)的模塊。

子系統(tǒng)相對(duì)獨(dú)立。 

預(yù)防額外操作帶來(lái)的風(fēng)險(xiǎn)。

目的

降低訪問(wèn)復(fù)雜系統(tǒng)的內(nèi)部子系統(tǒng)時(shí)的復(fù)雜度,簡(jiǎn)化客戶端之間的接口。

優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

減少系統(tǒng)相互依賴。 

提高靈活性。 

提高安全性。

缺點(diǎn):

不符合開(kāi)閉原則,如果要改東西很麻煩,繼承重寫(xiě)都不合適。也就是說(shuō)系統(tǒng)可以提供新的功能模塊而不必進(jìn)行修改。

主要角色

門(mén)面模式主要包含2種角色:

1.外觀角色(Facade):

外觀角色也稱門(mén)面角色,系統(tǒng)對(duì)外的統(tǒng)一接口;

2.子系統(tǒng)角色(SubSystem):

可以同時(shí)有一個(gè)或多個(gè)SubSystem。每個(gè)SubSytem都不是一個(gè)單獨(dú)的類(lèi),而是一個(gè)類(lèi)的集合。

SubSystem并不知道Facade的存在,對(duì)于SubSystem而言,F(xiàn)acade只是另一個(gè)客戶端而已(即Facade對(duì)SubSystem透明)

門(mén)面模式的基本使用

創(chuàng)建子系統(tǒng)角色

創(chuàng)建2個(gè)創(chuàng)建子系統(tǒng)角色:SubSystemA 與SubSystemB

public class SubSystemA {
    public void subSystem() {
        System.out.println("subSystem A");
    }
}
public class SubSystemB {
    public void subSystem() {
        System.out.println("subSystem B");
    }
}

創(chuàng)建外觀角色

public class Facade {
    private SubSystemA a = new SubSystemA();
    private SubSystemB b = new SubSystemB();
    /**
     * 提供對(duì)外接口
     */
    public void subSystemA() {
        this.a.subSystem();
    }
    /**
     * 提供對(duì)外接口
     */
    public void subSystemB() {
        this.b.subSystem();
    }
}

客戶端調(diào)用

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

門(mén)面模式實(shí)現(xiàn)商城下單

如商城系統(tǒng)中的下單,下單過(guò)程可能涉及多個(gè)模塊子系統(tǒng)的聯(lián)動(dòng)操作,如果分別發(fā)送網(wǎng)絡(luò)請(qǐng)求各個(gè)模塊子系統(tǒng)的接口,會(huì)增加一定復(fù)雜度與額外的網(wǎng)絡(luò)請(qǐng)求。

此時(shí)可以采取門(mén)面模式,將所有相關(guān)接口整合到一個(gè)接口中,由后端提供一個(gè)接口給前端調(diào)用。

假設(shè)在一個(gè)商城系統(tǒng)中,涉及庫(kù)存系統(tǒng)、支付系統(tǒng)、物流系統(tǒng)、入口系統(tǒng)。用戶下單時(shí)進(jìn)行校驗(yàn)庫(kù)存,驗(yàn)證支付,最后發(fā)貨這一整個(gè)過(guò)程串聯(lián)起來(lái),提供一個(gè)統(tǒng)一接口供客戶端調(diào)用。

庫(kù)存系統(tǒng)

public class StockSys {
    /**
     * 庫(kù)存校驗(yàn)
     */
    public Boolean verify(){
        if (Math.random()*10 >5) {
            System.out.println("StockSys verify success");
            return true;
        }
        System.out.println("StockSys verify fail");
        return  false;
    }
}

支付系統(tǒng)

public class PaySys {
    /**
     * 支付
     */
    public Boolean pay() {
        if (Math.random()*10 >2) {
            System.out.println("PaySys pay success");
            return true;
        }
        System.out.println("PaySys pay fail");
        return  false;
    }
}

物流系統(tǒng)

public class LogisticsSys {
    /**
     * 發(fā)貨
     */
    public void ship() {
        System.out.println("logistics ship");
    }
}

入口系統(tǒng)

public class MySys {
    StockSys stockSys = new StockSys();
    PaySys paySys = new PaySys();
    LogisticsSys logisticsSys = new LogisticsSys();
    public void order() {
        if (stockSys.verify()) {
            if (paySys.pay()) {
                logisticsSys.ship();
            }
        }
    }
}

客戶端調(diào)用

    public static void main(String[] args) {
        new MySys().order();
    }

StockSys verify success
PaySys pay success
logistics ship

StockSys verify fail

StockSys verify success
PaySys pay fail

到此這篇關(guān)于Java設(shè)計(jì)模式中的門(mén)面模式詳解的文章就介紹到這了,更多相關(guān)Java門(mén)面模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot druid數(shù)據(jù)庫(kù)連接池連接失敗后一直重連的解決方法

    springboot druid數(shù)據(jù)庫(kù)連接池連接失敗后一直重連的解決方法

    本文主要介紹了springboot druid數(shù)據(jù)庫(kù)連接池連接失敗后一直重連的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • Java字符串的壓縮與解壓縮的兩種方法

    Java字符串的壓縮與解壓縮的兩種方法

    這篇文章主要介紹了Java字符串的壓縮與解壓縮的兩種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Spring純Java配置集成kafka代碼實(shí)例

    Spring純Java配置集成kafka代碼實(shí)例

    這篇文章主要介紹了Spring純Java配置集成kafka代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • 一文帶你剖析Redisson分布式鎖的原理

    一文帶你剖析Redisson分布式鎖的原理

    相信使用過(guò)redis的,或者正在做分布式開(kāi)發(fā)的童鞋都知道redisson組件,它的功能很多,但我們使用最頻繁的應(yīng)該還是它的分布式鎖功能,少量的代碼,卻實(shí)現(xiàn)了加鎖、鎖續(xù)命(看門(mén)狗)、鎖訂閱、解鎖、鎖等待(自旋)等功能,我們來(lái)看看都是如何實(shí)現(xiàn)的
    2022-11-11
  • Java中集合和數(shù)組的排序方式小結(jié)

    Java中集合和數(shù)組的排序方式小結(jié)

    這篇文章主要介紹了Java中集合和數(shù)組的排序方式小結(jié),本文講解了對(duì)數(shù)字?jǐn)?shù)組、字符數(shù)組排序以及集合序列的排序,需要的朋友可以參考下
    2015-01-01
  • 使用BitSet位集合,一個(gè)重復(fù)校驗(yàn)工具

    使用BitSet位集合,一個(gè)重復(fù)校驗(yàn)工具

    這篇文章主要介紹了使用BitSet位集合,一個(gè)重復(fù)校驗(yàn)工具,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • springboot項(xiàng)目數(shù)據(jù)庫(kù)配置類(lèi)DatabaseConfig示例詳解

    springboot項(xiàng)目數(shù)據(jù)庫(kù)配置類(lèi)DatabaseConfig示例詳解

    這篇文章主要介紹了springboot項(xiàng)目數(shù)據(jù)庫(kù)配置類(lèi)DatabaseConfig實(shí)現(xiàn)代碼,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • JAVA錯(cuò)誤:'無(wú)效目標(biāo)發(fā)行版?17'的解決方案

    JAVA錯(cuò)誤:'無(wú)效目標(biāo)發(fā)行版?17'的解決方案

    這篇文章主要給大家介紹了關(guān)于JAVA錯(cuò)誤:'無(wú)效目標(biāo)發(fā)行版?17'的解決方案,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或使用java具有一的的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-09-09
  • java如何使用redis加鎖

    java如何使用redis加鎖

    這篇文章主要介紹了java如何使用redis加鎖問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 打開(kāi).properties中文顯示unicode編碼問(wèn)題以及解決

    打開(kāi).properties中文顯示unicode編碼問(wèn)題以及解決

    這篇文章主要介紹了打開(kāi).properties中文顯示unicode編碼問(wèn)題以及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01

最新評(píng)論

尤溪县| 于都县| 太康县| 讷河市| 林口县| 泽普县| 金塔县| 阿尔山市| 麦盖提县| 衡山县| 离岛区| 文化| 封丘县| 武隆县| 瑞金市| 界首市| 灵台县| 株洲市| 荆州市| 瑞安市| 赣榆县| 遂昌县| 黄山市| 宁德市| 梓潼县| 泸州市| 禄丰县| 托里县| 兴安县| 崇义县| 铅山县| 微山县| 梅河口市| 古浪县| 西林县| 松桃| 文安县| 永清县| 清水县| 灌云县| 姚安县|