五、外觀模式

定義:架構

        爲子系統中的一組接口提供一個一致的界面,Facade模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。測試

角色:spa

        1,外觀(Facade)角色 :客戶端能夠調用這個角色的方法。此角色知曉相關子系統的功能和責任。在正常狀況下,本角色會將全部從客戶端發來的請求委派到相應的子系統去。設計

        2,子系統(SubSystem)角色 :能夠同時有一個或者多個子系統。每一個子系統都不是一個單獨的類,而是一個類的集合。每一個子系統均可以被客戶端直接調用,或者被外觀角色調用。子系統並不知道外觀角色的存在,對於子系統而言,外觀角色僅僅是另一個客戶端而已。code

示意圖:對象

 

示例:接口

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,外觀角色類class

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類時,發現一些不須要它知道的方法。如上代碼,個人全部子類中的方法二都是方法一調用的方法,是配合方法一的,他們不須要被客戶端調用,並且具備必定的保密性,這樣使用外觀模式時就能夠不被客戶端知道。

優勢:

        實現了子系統與客戶端之間的鬆耦合關係。

        客戶端屏蔽了子系統組件,減小了客戶端所需處理的對象數目,並使得子系統使用起來更加容易

適用場景:

        設計初期階段,應該有意識的將不一樣層分離,層與層之間創建外觀模式。

        開發階段,子系統愈來愈複雜,增長外觀模式提供一個簡單的調用接口。

        維護一個大型遺留系統的時候,可能這個系統已經很是難以維護和擴展,但又包含很是重要的功能,爲其開發一個外觀類,以便新系統與其交互。

外觀模式總結:

一、外觀模式爲複雜子系統提供了一個簡單接口,並不爲子系統添加新的功能和行爲。

二、外觀模式實現了子系統與客戶端之間的鬆耦合關係。 

三、外觀模式沒有封裝子系統的類,只是提供了簡單的接口。 若是應用須要,它並不限制客戶使用子系統類。所以能夠靈活的在系統易用性與通用性之間選擇。

四、外觀模式注重的是簡化接口,它更多的時候是從架構的層次去看整個系統,而並不是單個類的層次。 

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息