23種設(shè)計模式(8) java外觀模式
23種設(shè)計模式第八篇:java外觀模式
定義:
為子系統(tǒng)中的一組接口提供一個一致的界面,F(xiàn)acade模式定義了一個高層接口,這個接口使得這一子系統(tǒng)更加容易使用。
角色:
1、外觀(Facade)角色 :客戶端可以調(diào)用這個角色的方法。此角色知曉相關(guān)子系統(tǒng)的功能和責任。在正常情況下,本角色會將所有從客戶端發(fā)來的請求委派到相應(yīng)的子系統(tǒng)去。
2、子系統(tǒng)(SubSystem)角色 :可以同時有一個或者多個子系統(tǒng)。每個子系統(tǒng)都不是一個單獨的類,而是一個類的集合。每個子系統(tǒng)都可以被客戶端直接調(diào)用,或者被外觀角色調(diào)用。子系統(tǒng)并不知道外觀角色的存在,對于子系統(tǒng)而言,外觀角色僅僅是另外一個客戶端而已。
示意圖:

示例:
1、子系統(tǒng)角色,由若干個類組成
public class SubClass1 {
public void method1(){
System.out.println("這是子系統(tǒng)類1中的方法1");
}
public void method2(){
System.out.println("這是子系統(tǒng)類1中的方法2");
}
}
public class SubClass2 {
public void method1(){
System.out.println("這是子系統(tǒng)類2中的方法1");
}
public void method2(){
System.out.println("這是子系統(tǒng)類2中的方法2");
}
}
public class SubClass3 {
public void method1(){
System.out.println("這是子系統(tǒng)類3中的方法1");
}
public void method2(){
System.out.println("這是子系統(tǒng)類3中的方法2");
}
}
2、外觀角色類
public class FacadeClass {
public void FacadeMethod(){
SubClass1 s1 = new SubClass1();
s1.method1();
SubClass2 s2 = new SubClass2();
s2.method1();
SubClass3 s3 = new SubClass3();
s3.method1();
}
}
3、客戶端測試方法
public class ClientClass {
public static void main(String[] args) {
FacadeClass fc = new FacadeClass();
fc.FacadeMethod();
}
}
Facade類其實相當于子系統(tǒng)中SubClass類的外觀界面,有了這個Facade類,那么客戶端就不需要親自調(diào)用子系統(tǒng)中的那些具體實現(xiàn)的子類了,也不需要知道系統(tǒng)內(nèi)部的實現(xiàn)細節(jié),甚至都不需要知道這些子類的存在,客戶端只需要跟Facade類交互就好了,從而更好地實現(xiàn)了客戶端和子系統(tǒng)中具體類的解耦,讓客戶端更容易地使用系統(tǒng)。
同時,這樣定義一個Facade類可以有效地屏蔽內(nèi)部的細節(jié),免得客戶端去調(diào)用Module類時,發(fā)現(xiàn)一些不需要它知道的方法。如上代碼,我的所有子類中的方法二都是方法一調(diào)用的方法,是配合方法一的,他們不需要被客戶端調(diào)用,而且具有一定的保密性,這樣使用外觀模式時就可以不被客戶端知道。
優(yōu)點:
實現(xiàn)了子系統(tǒng)與客戶端之間的松耦合關(guān)系。
客戶端屏蔽了子系統(tǒng)組件,減少了客戶端所需處理的對象數(shù)目,并使得子系統(tǒng)使用起來更加容易。
適用場景:
設(shè)計初期階段,應(yīng)該有意識的將不同層分離,層與層之間建立外觀模式。
開發(fā)階段,子系統(tǒng)越來越復(fù)雜,增加外觀模式提供一個簡單的調(diào)用接口。
維護一個大型遺留系統(tǒng)的時候,可能這個系統(tǒng)已經(jīng)非常難以維護和擴展,但又包含非常重要的功能,為其開發(fā)一個外觀類,以便新系統(tǒng)與其交互。
外觀模式總結(jié):
1、外觀模式為復(fù)雜子系統(tǒng)提供了一個簡單接口,并不為子系統(tǒng)添加新的功能和行為。
2、外觀模式實現(xiàn)了子系統(tǒng)與客戶端之間的松耦合關(guān)系。
3、外觀模式?jīng)]有封裝子系統(tǒng)的類,只是提供了簡單的接口。 如果應(yīng)用需要,它并不限制客戶使用子系統(tǒng)類。因此可以靈活的在系統(tǒng)易用性與通用性之間選擇。
4、外觀模式注重的是簡化接口,它更多的時候是從架構(gòu)的層次去看整個系統(tǒng),而并非單個類的層次。
轉(zhuǎn)自:java知音
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
詳解一個簡單的Servlet容器的設(shè)計與實現(xiàn)
Servlet算是Java Web開發(fā)請求鏈路調(diào)用棧中底層的一個技術(shù),而了解一個Servlet容器的實現(xiàn)有助于更好的理解JavaWeb開發(fā),所以下面就來看看如何設(shè)計與實現(xiàn)一個簡單的Servlet容器吧2023-07-07
java.sql.SQLException:com.mysql.cj.jdbc.Driver報錯問題解決
這篇文章主要給大家介紹了關(guān)于java.sql.SQLException:com.mysql.cj.jdbc.Driver報錯問題解決的相關(guān)資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2023-08-08
如何使用Spring boot的@Transactional進行事務(wù)管理
這篇文章介紹了SpringBoot中使用@Transactional注解進行聲明式事務(wù)管理的詳細信息,包括基本用法、核心配置參數(shù)、關(guān)鍵注意事項、調(diào)試技巧、最佳實踐以及完整示例,感興趣的朋友一起看看吧2025-02-02
SpringCloud OpenFeign與Ribbon客戶端配置詳解
在springcloud中,openfeign是取代了feign作為負載均衡組件的,feign最早是netflix提供的,他是一個輕量級的支持RESTful的http服務(wù)調(diào)用框架,內(nèi)置了ribbon,而ribbon可以提供負載均衡機制,因此feign可以作為一個負載均衡的遠程服務(wù)調(diào)用框架使用2022-11-11
Spring中的注解之@Override和@Autowired
看別人寫的代碼,經(jīng)常會用到 @Override 和 @Autowired 這兩個注解.這邊總結(jié)一下這兩個注解的作用,對正在學習java的小伙伴們有很好地幫助,需要的朋友可以參考下2021-05-05
Java工作環(huán)境的配置與Eclipse的安裝過程
這篇文章主要介紹了Java工作環(huán)境的配置與Eclipse的安裝過程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-02-02
java_String和StringBuffer區(qū)別分析
JAVA平臺提供了兩個類:String和StringBuffer,它們可以儲存和操作字符串,即包含多個字符的字符數(shù)據(jù)。這個String類提供了數(shù)值不可改變的字符串。2013-04-04

