1. 程式人生 > >Android開發之設計模式-外觀模式

Android開發之設計模式-外觀模式

外觀模式(Facade Pattern)

定義:外部與一個子系統的通訊必須通過一個統一的外觀物件進行,為子系統中的一組介面提供一個一致的介面,外觀模式定義了一個高層介面,這個介面使得這一子系統更加容易使用。

主要解決:降低訪問複雜系統的內部子系統時的複雜度,簡化客戶端與之的介面。

何時使用: 1、客戶端不需要知道系統內部的複雜聯絡,整個系統只需提供一個"接待員"即可。 2、定義系統的入口。

如何解決:客戶端不與系統耦合,外觀類與系統耦合。

關鍵程式碼:在客戶端和複雜系統之間再加一層,這一層將呼叫順序、依賴關係等處理好。

應用例項: 1、去醫院看病,可能要去掛號、門診、劃價、取藥,讓患者或患者家屬覺得很複雜,如果有提供接待人員,只讓接待人員來處理,就很方便。 2、JAVA 的三層開發模式。

優點: 1、減少系統相互依賴。 2、提高靈活性。 3、提高了安全性。

缺點:不符合開閉原則,如果要改東西很麻煩,繼承重寫都不合適。

使用場景: 1、為複雜的模組或子系統提供外界訪問的模組。 2、子系統相對獨立。 3、預防低水平人員帶來的風險。

注意事項:在層次化結構中,可以使用外觀模式定義系統中每一層的入口。

看個例項:

小張原本是個程式設計師,做了幾年後發現錢沒掙多少,頭髮卻白了不少,

IT ä»ä¸èçåå究ç«æå¤å¤§ï¼CCAV1对å京æäºèç½å¬å¸28å²ç¨åºåçæé访æ¶è¯´ãå¶å®æè§å¾å§ï¼ååä¹æ²¡é£ä¹å¤§ã - å¶å®æè§å¾å§ï¼ååä¹æ²¡é£ä¹å¤§_CCAV_大ç·_é访_åå_è£é¼è¡¨æ

於是決定做個小生意,開個小餐館。可是開餐館不是一件容易的事情,僅僅行政類的審批流程就不少。至少包括辦理衛生許可證,辦理稅務登記,辦理工商登記等。

先看下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、執行程式,輸出結果:

外觀模式的目的不是給予子系統新增新的功能介面,而是為了讓外部減少與子系統內多個模組的互動,鬆散耦合,從而讓外部能夠更簡單地使用子系統。

外觀模式的本質是:封裝互動,簡化呼叫

外觀模式詳解連結:

下篇組合模式,待續...