23種設計模式(8)-外觀模式
定義:
為子系統中的一組介面提供一個一致的介面,Facade模式定義了一個高層介面,這個介面使得這一子系統更加容易使用。
角色:
1,外觀(Facade)角色 :客戶端可以呼叫這個角色的方法。此角色知曉相關子系統的功能和責任。在正常情況下,本角色會將所有從客戶端發來的請求委派到相應的子系統去。
2,子系統(SubSystem)角色 :可以同時有一個或者多個子系統。每個子系統都不是一個單獨的類,而是一個類的集合。每個子系統都可以被客戶端直接呼叫,或者被外觀角色呼叫。子系統並不知道外觀角色的存在,對於子系統而言,外觀角色僅僅是另外一個客戶端而已。
示意圖
示例:
1,子系統角色,由若干個類組成
public class SubClass1 {
public void method1(){
System.out.println("這是子系統類1中的方法1");
}
public void method2(){
System.out.println("這是子系統類1中的方法2");
}
}
public class SubClass2 {
public void method1(){
System.out.println("這是子系統類2中的方法1");
}
public void method2(){
System.out.println("這是子系統類2中的方法2");
}
}
public class SubClass3 {
public void method1(){
System.out.println("這是子系統類3中的方法1");
}
public void method2(){
System.out.println("這是子系統類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類其實相當於子系統中SubClass類的外觀介面,有了這個Facade類,那麼客戶端就不需要親自呼叫子系統中的那些具體實現的子類了,也不需要知道系統內部的實現細節,甚至都不需要知道這些子類的存在,客戶端只需要跟Facade類互動就好了,從而更好地實現了客戶端和子系統中具體類的解耦,讓客戶端更容易地使用系統。
同時,這樣定義一個Facade類可以有效地遮蔽內部的細節,免得客戶端去呼叫Module類時,發現一些不需要它知道的方法。如上程式碼,我的所有子類中的方法二都是方法一呼叫的方法,是配合方法一的,他們不需要被客戶端呼叫,而且具有一定的保密性,這樣使用外觀模式時就可以不被客戶端知道。
優點:
實現了子系統與客戶端之間的鬆耦合關係。
客戶端遮蔽了子系統元件,減少了客戶端所需處理的物件數目,並使得子系統使用起來更加容易。
適用場景:
設計初期階段,應該有意識的將不同層分離,層與層之間建立外觀模式。
開發階段,子系統越來越複雜,增加外觀模式提供一個簡單的呼叫介面。
維護一個大型遺留系統的時候,可能這個系統已經非常難以維護和擴充套件,但又包含非常重要的功能,為其開發一個外觀類,以便新系統與其互動。
外觀模式總結:
1、外觀模式為複雜子系統提供了一個簡單介面,並不為子系統新增新的功能和行為。
2、外觀模式實現了子系統與客戶端之間的鬆耦合關係。
3、外觀模式沒有封裝子系統的類,只是提供了簡單的介面。 如果應用需要,它並不限制客戶使用子系統類。因此可以靈活的在系統易用性與通用性之間選擇。
4、外觀模式注重的是簡化介面,它更多的時候是從架構的層次去看整個系統,而並非單個類的層次。
閒暇之餘鞏固一下自己的知識體系 ,擴充一下自己的知識面。快利用瑣碎時間給自己充電吧!
相關文章
- 【23種設計模式】外觀模式(十)設計模式
- java23種設計模式-門面模式(外觀模式)Java設計模式
- 設計模式-外觀模式設計模式
- 設計模式---外觀設計模式設計模式
- 《設計模式》 - 8. 外觀模式( Facade )設計模式
- 設計模式(十)外觀模式設計模式
- java設計模式-外觀模式Java設計模式
- 設計模式系列-外觀模式設計模式
- 設計模式(十):外觀模式設計模式
- 【設計模式】外觀設計模式
- Python設計模式-外觀模式Python設計模式
- 極簡設計模式-外觀模式設計模式
- JS 設計模式 十一(外觀模式)JS設計模式
- Java設計模式11:外觀模式Java設計模式
- 軟體設計模式————(外觀模式)設計模式
- 設計模式之【門面模式(外觀模式)】設計模式
- 《Head First 設計模式》:外觀模式設計模式
- 設計模式第六講-外觀模式設計模式
- 通俗 Python 設計模式——外觀模式Python設計模式
- 23種設計模式設計模式
- 23種設計模式(二)---策略設計模式設計模式
- 23種設計模式(八)-原型設計模式設計模式原型
- 23種設計模式(四)-代理模式設計模式
- 23種設計模式(7)-代理模式設計模式
- 23種設計模式之策略模式設計模式
- 23種設計模式之命令模式設計模式
- 設計模式 | 外觀模式及典型應用設計模式
- 設計模式——9外觀模式(Facade)設計模式
- 23種設計模式(四)- 模板方法設計模式設計模式
- 23種設計模式(七)-狀態設計模式設計模式
- java 23種設計模式 /Java設計模式
- 23種java設計模式Java設計模式
- Go 實現常用設計模式(八)外觀模式Go設計模式
- JS設計模式之Facade(外觀)模式JS設計模式
- 軟體設計模式系列之十二——外觀模式設計模式
- 23種設計模式-原型模式(3)設計模式原型
- 23種設計模式之組合模式設計模式
- 23種設計模式(抽象工廠模式)設計模式抽象