Java結(jié)構(gòu)型模式之門面模式詳解
一.介紹
門面模式(Facade Pattern)屬于結(jié)構(gòu)型模式。門面模式又叫作外觀模式,通過給多個(gè)復(fù)雜的子系統(tǒng)提供一個(gè)門面(高層接口),使這些子系統(tǒng)更加容易的被訪問,客戶端與門面直接通信,封裝/隱藏背后子系統(tǒng)的細(xì)節(jié)與復(fù)雜度
二.UML類圖
未使用門面模式

使用門面模式

三.具體代碼
業(yè)務(wù)代碼
class Facade {
private SubSystem1 subSystem1 = new SubSystem1();
private SubSystem2 subSystem2 = new SubSystem2();
private SubSystem3 subSystem3 = new SubSystem3();
public void doSomething(){
subSystem1.operation1();
subSystem2.operation2();
subSystem3.operation3();
}
}
class SubSystem1 {
void operation1(){}
}
class SubSystem2 {
void operation2(){}
}
class SubSystem3 {
void operation3(){}
}
客戶端
public class Client {
private static Facade facade = new Facade();
public static void main(String[] args) {
facade.doSomething();
}
}
四.使用場景
1.繼承第三方系統(tǒng)
- 當(dāng)一個(gè)復(fù)雜系統(tǒng)的子系統(tǒng)很多時(shí),門面模式可以為系統(tǒng)設(shè)計(jì)一個(gè)簡單的接口供外界訪問
- 當(dāng)客戶端與多個(gè)子系統(tǒng)之間存在很大的聯(lián)系時(shí),引入門面模式可將它們分離,從而提高子系統(tǒng)的獨(dú)立性和可移植性
2.組件對(duì)外提供API
- 簡化組件調(diào)用API,提供統(tǒng)一訪問接口
3.分層架構(gòu)層之間調(diào)用
- 對(duì)分層結(jié)構(gòu)系統(tǒng)構(gòu)建時(shí),使用門面模式定義子系統(tǒng)中每層的入口點(diǎn)可以簡化子系統(tǒng)之間的依賴關(guān)系
五.優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
- 遵循迪米特法則
- 降低耦合度,屏蔽子系統(tǒng)組件,減少調(diào)用端代碼量
缺點(diǎn)
- 違背開閉原則,如果修改子系統(tǒng)的代碼,需要修改Facade的代碼
六.在tomcat中的應(yīng)用
org.apache.catalina.connector.RequestFacade
到此這篇關(guān)于Java結(jié)構(gòu)型模式之門面模式詳解的文章就介紹到這了,更多相關(guān)Java門面模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot?加載本地jar到maven的實(shí)現(xiàn)方法
如何在SpringBoot項(xiàng)目中加載本地jar到Maven本地倉庫,使用Maven的install-file目標(biāo)來實(shí)現(xiàn),本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2025-01-01
Java為什么匿名內(nèi)部類參數(shù)引用需要用final進(jìn)行修飾?
今天小編就為大家分享一篇關(guān)于Java為什么匿名內(nèi)部類參數(shù)引用需要用final進(jìn)行修飾?,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-04-04
基于springBoot配置文件properties和yml中數(shù)組的寫法
這篇文章主要介紹了springBoot配置文件properties和yml中數(shù)組的寫法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
使用Autowired為什么會(huì)被IDEA警告最佳修改方法
這篇文章主要介紹了使用Autowired為什么會(huì)被IDEA警告,應(yīng)該怎么修改最佳,除了使用@Autowired以外,我們其實(shí)也有幾種好用的方式,使用@Resource替代@Autiwired方法是其中一種,只需要改變一個(gè)注解,這里就不展示了,需要的朋友可以參考下2023-02-02
Spring Data JPA實(shí)現(xiàn)排序與分頁查詢超詳細(xì)流程講解
在介紹Spring Data JPA的時(shí)候,我們首先認(rèn)識(shí)下Hibernate。Hibernate是數(shù)據(jù)訪問解決技術(shù)的絕對(duì)霸主,使用O/R映射技術(shù)實(shí)現(xiàn)數(shù)據(jù)訪問,O/R映射即將領(lǐng)域模型類和數(shù)據(jù)庫的表進(jìn)行映射,通過程序操作對(duì)象而實(shí)現(xiàn)表數(shù)據(jù)操作的能力,讓數(shù)據(jù)訪問操作無須關(guān)注數(shù)據(jù)庫相關(guān)的技術(shù)2022-10-10
java為什么會(huì)出現(xiàn)精度丟失這種現(xiàn)象你知道嗎
這篇文章主要介紹了Java精度丟失的問題,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下,希望能夠給你帶來幫助2021-08-08

