亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java設計模式中的門面模式詳解

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

門面模式

概述

門面模式(Facade Pattern)又叫外觀模式,屬于結構性模式。

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

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

應用場景

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

子系統(tǒng)相對獨立。 

預防額外操作帶來的風險。

目的

降低訪問復雜系統(tǒng)的內部子系統(tǒng)時的復雜度,簡化客戶端之間的接口。

優(yōu)缺點

優(yōu)點:

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

提高靈活性。 

提高安全性。

缺點:

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

主要角色

門面模式主要包含2種角色:

1.外觀角色(Facade):

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

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

可以同時有一個或多個SubSystem。每個SubSytem都不是一個單獨的類,而是一個類的集合。

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

門面模式的基本使用

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

創(chuàng)建2個創(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();
    /**
     * 提供對外接口
     */
    public void subSystemA() {
        this.a.subSystem();
    }
    /**
     * 提供對外接口
     */
    public void subSystemB() {
        this.b.subSystem();
    }
}

客戶端調用

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

門面模式實現(xiàn)商城下單

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

此時可以采取門面模式,將所有相關接口整合到一個接口中,由后端提供一個接口給前端調用。

假設在一個商城系統(tǒng)中,涉及庫存系統(tǒng)、支付系統(tǒng)、物流系統(tǒng)、入口系統(tǒng)。用戶下單時進行校驗庫存,驗證支付,最后發(fā)貨這一整個過程串聯(lián)起來,提供一個統(tǒng)一接口供客戶端調用。

庫存系統(tǒng)

public class StockSys {
    /**
     * 庫存校驗
     */
    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();
            }
        }
    }
}

客戶端調用

    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

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

相關文章

  • Java concurrency之AtomicLongArray原子類_動力節(jié)點Java學院整理

    Java concurrency之AtomicLongArray原子類_動力節(jié)點Java學院整理

    這篇文章主要介紹了Java concurrency之AtomicLongArray原子類的相關知識,感興趣的朋友參考下吧
    2017-06-06
  • SpringBoot2.0整合Redis自定義注入bean組件配置的實戰(zhàn)教程

    SpringBoot2.0整合Redis自定義注入bean組件配置的實戰(zhàn)教程

    這篇文章主要介紹了SpringBoot2.0整合Redis自定義注入bean組件配置,我們將基于SpringBoot2.0整合搭建的微服務項目為奠基,開啟中間件Redis的實戰(zhàn)之路,需要的朋友可以參考下
    2023-06-06
  • 如何把spring boot應用發(fā)布到Harbor

    如何把spring boot應用發(fā)布到Harbor

    這篇文章主要介紹了如何把spring boot應用發(fā)布到Harbor,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • IntelliJ IDEA2021.1 配置大全(超詳細教程)

    IntelliJ IDEA2021.1 配置大全(超詳細教程)

    這篇文章主要介紹了IntelliJ IDEA2021.1 配置大全(超詳細教程),需要的朋友可以參考下
    2021-04-04
  • Mybatis動態(tài)SQL foreach標簽用法實例

    Mybatis動態(tài)SQL foreach標簽用法實例

    這篇文章主要介紹了Mybatis動態(tài)SQL foreach標簽用法實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • Java基礎之throw和throws的示例詳解

    Java基礎之throw和throws的示例詳解

    throw是用來拋出一個具體的異常實例,而throws是用來聲明方法可能會拋出哪些類型的異常,是對調用者的一種通知和要求,這篇文章主要介紹了Java基礎:throw和throws的詳解,需要的朋友可以參考下
    2024-06-06
  • SpringBoot + vue2.0查詢所用功能詳解

    SpringBoot + vue2.0查詢所用功能詳解

    這篇文章主要介紹了SpringBoot + vue2.0查詢所用功能,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-11-11
  • SpringDataJpa:JpaRepository增刪改查操作

    SpringDataJpa:JpaRepository增刪改查操作

    這篇文章主要介紹了SpringDataJpa:JpaRepository增刪改查操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Spring Security CsrfFilter過濾器用法實例

    Spring Security CsrfFilter過濾器用法實例

    這篇文章主要介紹了Spring Security CsrfFilter過濾器用法實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • 基于Java匯總Spock框架Mock靜態(tài)資源經驗

    基于Java匯總Spock框架Mock靜態(tài)資源經驗

    這篇文章主要介紹了基于Java匯總Spock框架Mock靜態(tài)資源經驗,前面講了?Spock框架Mock對象、方法經驗總結,今天分享一下Spock框架中Mock靜態(tài)資源的實踐經驗匯總。分成靜態(tài)資源和混合場景,需要的朋友可以參考一下
    2022-02-02

最新評論