Java設(shè)計模式之外觀模式解析
1、簡介
1.1、定義
外觀模式:提供了一個統(tǒng)一的接口,用來訪問子系統(tǒng)中的一群接口。外觀定義了一個高層接口,讓子系統(tǒng)更容易使用。
1.2、結(jié)構(gòu)圖
1.3、角色
- 外觀(Facade)角色 : 客戶端可以調(diào)用這個角色的方法。此角色知曉相關(guān)的(一個或者多個)子系統(tǒng)的功能和責(zé)任。在正常情況下,本角色會將所有從客戶端發(fā)來的請求委派到相應(yīng)的子系統(tǒng)去
- 子系統(tǒng)(SubSystem)角色 : 可以同時有一個或者多個子系統(tǒng)。每個子系統(tǒng)都不是一個單獨的類,而是一個類的集合。每個子系統(tǒng)都可以被客戶端直接調(diào)用,或者被門面角色調(diào)用。子系統(tǒng)并不知道門面的存在,對于子系統(tǒng)而言,門面僅僅是另外一個客戶端而已
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)缺點
優(yōu)點
減少了系統(tǒng)的相互依賴,實現(xiàn)了子系統(tǒng)與客戶端之間的松耦合關(guān)系客戶端屏蔽了子系統(tǒng)組件,減少了客戶端所需處理的對象數(shù)目,并使得子系統(tǒng)使用起來更加容易更好的劃分訪問層次
缺點
不符合開閉原則,如果要改東西很麻煩,繼承重寫都不合適
到此這篇關(guān)于Java設(shè)計模式之外觀模式解析的文章就介紹到這了,更多相關(guān)Java外觀模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java基礎(chǔ)之Integer使用的注意事項及面試題
這篇文章主要給大家介紹了關(guān)于Java基礎(chǔ)之Integer使用注意事項及面試題的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-12-12Java的NIO之并發(fā)環(huán)境下非阻塞IO技術(shù)詳解
這篇文章主要介紹了Java的NIO之并發(fā)環(huán)境下非阻塞IO技術(shù)詳解,Java NIO(New IO)是Java平臺提供的一種用于高效處理I/O操作的API,它引入了一組新的類和概念,以提供更好的性能和可擴展性,需要的朋友可以參考下2023-09-09Spring Data Jpa+SpringMVC+Jquery.pagination.js實現(xiàn)分頁示例
本文介紹了Spring Data Jpa+SpringMVC+Jquery.pagination.js實現(xiàn)分頁示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-12-12