Java設(shè)計(jì)模式之外觀模式解析
1、簡介
1.1、定義
外觀模式:提供了一個(gè)統(tǒng)一的接口,用來訪問子系統(tǒng)中的一群接口。外觀定義了一個(gè)高層接口,讓子系統(tǒng)更容易使用。
1.2、結(jié)構(gòu)圖

1.3、角色
- 外觀(Facade)角色 : 客戶端可以調(diào)用這個(gè)角色的方法。此角色知曉相關(guān)的(一個(gè)或者多個(gè))子系統(tǒng)的功能和責(zé)任。在正常情況下,本角色會將所有從客戶端發(fā)來的請求委派到相應(yīng)的子系統(tǒng)去
- 子系統(tǒng)(SubSystem)角色 : 可以同時(shí)有一個(gè)或者多個(gè)子系統(tǒng)。每個(gè)子系統(tǒng)都不是一個(gè)單獨(dú)的類,而是一個(gè)類的集合。每個(gè)子系統(tǒng)都可以被客戶端直接調(diào)用,或者被門面角色調(diào)用。子系統(tǒng)并不知道門面的存在,對于子系統(tǒng)而言,門面僅僅是另外一個(gè)客戶端而已
2、Demo示例
2.1、Facade外觀類
package com.jbp.designpattern.facade;
/**
* @ClassName: Facade
* @description: 外觀類
* @author: JiangBeiPing
* @create: 2021-07-27 11:15
* @Version: 1.0
**/
public class Facade {
// 被委托的對象
SubSystem1 system1;
SubSystem2 system2;
SubSystem3 system3;
public Facade() {
this.system1 = new SubSystem1();
this.system2 = new SubSystem2();
this.system3 = new SubSystem3();
}
// 提供給外部的方法
public void method1(){
system1.method1();
}
public void method2(){
system2.method1();
}
public void method3(){
system3.method1();
}
}
2.2、子系統(tǒng)(SubSystem)角色
package com.jbp.designpattern.facade;
/**
* @ClassName: SubSystem
* @description: 子系統(tǒng)一號
* @author: JiangBeiPing
* @create: 2021-07-27 11:16
* @Version: 1.0
**/
public class SubSystem1 {
public void method1(){
System.out.println("子系統(tǒng)一號---方法1號");
}
}
package com.jbp.designpattern.facade;
/**
* @ClassName: SubSystem2
* @description: 子系統(tǒng)二號
* @author: JiangBeiPing
* @create: 2021-07-27 11:19
* @Version: 1.0
**/
public class SubSystem2 {
public void method1(){
System.out.println("子系統(tǒng)二號---方法1號");
}
}
package com.jbp.designpattern.facade;
/**
* @ClassName: SubSystem3
* @description: 子系統(tǒng)三號
* @author: JiangBeiPing
* @create: 2021-07-27 11:24
* @Version: 1.0
**/
public class SubSystem3 {
public void method1(){
System.out.println("子系統(tǒng)三號---方法1號");
}
}
2.3、客戶端角色類
package com.jbp.designpattern.facade;
/**
* @ClassName: Test
* @description: 測試
* @author: JiangBeiPing
* @create: 2021-07-27 11:29
* @Version: 1.0
**/
public class Test {
public static void main(String[] args) {
Facade facade = new Facade();
facade.method1();
facade.method2();
facade.method3();
}
}
3、優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
減少了系統(tǒng)的相互依賴,實(shí)現(xiàn)了子系統(tǒng)與客戶端之間的松耦合關(guān)系客戶端屏蔽了子系統(tǒng)組件,減少了客戶端所需處理的對象數(shù)目,并使得子系統(tǒng)使用起來更加容易更好的劃分訪問層次
缺點(diǎn)
不符合開閉原則,如果要改東西很麻煩,繼承重寫都不合適
到此這篇關(guān)于Java設(shè)計(jì)模式之外觀模式解析的文章就介紹到這了,更多相關(guān)Java外觀模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java根據(jù)網(wǎng)絡(luò)地址保存圖片的方法
這篇文章主要為大家詳細(xì)介紹了java根據(jù)網(wǎng)絡(luò)地址保存圖片的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07
SpringBoot中使用com.alibaba.druid.filter.config.ConfigTools對數(shù)據(jù)庫
這篇文章主要介紹了SpringBoot中使用com.alibaba.druid.filter.config.ConfigTools對數(shù)據(jù)庫密碼加密的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01
關(guān)于SpringBoot中事務(wù)失效的幾種情況
這篇文章主要介紹了關(guān)于SpringBoot中事務(wù)失效的幾種情況,Spring AOP默認(rèn)使用動態(tài)代理,會給被代理的類生成一個(gè)代理類,事務(wù)相關(guān)的操作都通過代理來完成,使用內(nèi)部方法調(diào)用時(shí),使用的是實(shí)例調(diào)用,沒有通過代理類調(diào)用方法,因此事務(wù)不會檢測到失敗,需要的朋友可以參考下2023-08-08
Java使用多線程批次查詢大量數(shù)據(jù)(Callable返回?cái)?shù)據(jù))方式
今天給大家分享Java使用多線程批次查詢大量數(shù)據(jù)(Callable返回?cái)?shù)據(jù))方式,多線程有好幾種方式,今天說的方式比較好,實(shí)現(xiàn)Callable<> 這種方式能返回查詢的數(shù)據(jù),加上Future異步獲取方式,查詢效率大大加快,感興趣的朋友一起看看吧2023-11-11
MyBatis-Plus動態(tài)返回實(shí)體類示例詳解
這篇文章主要為大家介紹了MyBatis-Plus動態(tài)返回實(shí)體類示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
Springboot 2.x集成kafka 2.2.0的示例代碼
kafka近幾年更新非??欤部梢钥闯鰇afka在企業(yè)中是用的頻率越來越高。本文主要為大家介紹了Springboot 2.x集成kafka 2.2.0的示例代碼,需要的可以參考一下2022-04-04

