Android開發之設計模式-外觀模式
外觀模式(Facade Pattern)
定義:外部與一個子系統的通訊必須通過一個統一的外觀物件進行,為子系統中的一組介面提供一個一致的介面,外觀模式定義了一個高層介面,這個介面使得這一子系統更加容易使用。
主要解決:降低訪問複雜系統的內部子系統時的複雜度,簡化客戶端與之的介面。
何時使用: 1、客戶端不需要知道系統內部的複雜聯絡,整個系統只需提供一個"接待員"即可。 2、定義系統的入口。
如何解決:客戶端不與系統耦合,外觀類與系統耦合。
關鍵程式碼:在客戶端和複雜系統之間再加一層,這一層將呼叫順序、依賴關係等處理好。
應用例項: 1、去醫院看病,可能要去掛號、門診、劃價、取藥,讓患者或患者家屬覺得很複雜,如果有提供接待人員,只讓接待人員來處理,就很方便。 2、JAVA 的三層開發模式。
優點: 1、減少系統相互依賴。 2、提高靈活性。 3、提高了安全性。
缺點:不符合開閉原則,如果要改東西很麻煩,繼承重寫都不合適。
使用場景: 1、為複雜的模組或子系統提供外界訪問的模組。 2、子系統相對獨立。 3、預防低水平人員帶來的風險。
注意事項:在層次化結構中,可以使用外觀模式定義系統中每一層的入口。
看個例項:
小張原本是個程式設計師,做了幾年後發現錢沒掙多少,頭髮卻白了不少,
於是決定做個小生意,開個小餐館。可是開餐館不是一件容易的事情,僅僅行政類的審批流程就不少。至少包括辦理衛生許可證,辦理稅務登記,辦理工商登記等。
先看下UML圖
1、定義行政審批介面
public interface Executive {
void approve();
}
2、實現介面的實體類
HealthOffice.java
public class HealthOffice implements Executive{
@Override
public void approve() {
System.out.println("衛生局通過審批,不準用地溝油!要保持衛生!把顧客的健康放在第一位!");
}
}
RevenueOffice.java
public class RevenueOffice implements Executive{ @Override public void approve() { System.out.println("稅務局登記完成,偷稅漏稅就會落得像範XX的下場"); } }
SaicOffice.java
public class SaicOffice implements Executive{
@Override
public void approve() {
System.out.println("工商局完成稽核,辦營業執照");
}
}
3、外觀類
ApproveFacade.java
public class ApproveFacade {
public ApproveFacade(){
}
public void wholeApprove(){
new HealthOffice().approve();
new RevenueOffice().approve();
new SaicOffice().approve();
}
}
4、客戶端
public class FacadePatternDemo {
public static void main(String[] args) {
System.out.println("開始辦理行政手續...");
ApproveFacade af = new ApproveFacade();
af.wholeApprove();
System.out.println("行政手續終於辦完了");
}
}
5、執行程式,輸出結果:
外觀模式的目的不是給予子系統新增新的功能介面,而是為了讓外部減少與子系統內多個模組的互動,鬆散耦合,從而讓外部能夠更簡單地使用子系統。
外觀模式的本質是:封裝互動,簡化呼叫。
外觀模式詳解連結:
下篇組合模式,待續...