設計模式學習--------4.外觀模式學習

場景:

         當客戶端訪問一個子系統中的多個子模塊的方法時,既能簡單的使用這些子系統內部的模塊功能,而又不用客戶端

與子系統內部的多個模塊交互.

        比如舉辦一個會議,需要首先預約時間,然後準備會議室,接着就是開會,最後是總結會議成果。如果沒有助理,這些

情我都要自己去一個一個親自去準備,並且必須知道每一步的具體步驟,這樣不但增加了我開會所用的時間也增加了

次會議的複雜度。所以我希望有助理能幫我處理這個會議的步驟,然後助理指派手下的4個實習生去準備,實習生A

來負責預約時間,實習生B負責準備會議室,實習生C負責召集開會人員,實習生D負責會議總結,這個助理就是這樣一個外

觀接口,所有實習生都是負責開會這樣一個系統需求的子模塊,但有時候我想要進行電話會議,就不需要準備會議室的步

驟,那我直接找A幫忙預約時間打電話就好,也就不需要助理當中間人了.


定義:

        爲子系統中的一組接口提供一個一致的界面,Facade(外觀)模式定義了一個高層接口,這個接口使得這一子系統

加容易使用。


角色:

       Facade: 定義子系統的多個模塊對外的高層接口,通常需要調用內部多個模塊,從而把客戶的請求代理給適當的子系

統對象

package com.kris.study;

public class Facade {
    private Facade(){}
    public static void kaiHui(){
    	new FreshManA().time();
    	new FreshManB().getReady();
    	new FreshManC().start();
    	new FreshManD().summary();
    }
}

       子系統模塊:接受Facade對象的委派,真正實現功能,各個模塊之間可能有交互。Facade知道各個模塊,但是

各個模塊不一定知道Facade對象。比如實習生只知道助理叫什麼,但是不知道她的名字和所負責的工作。

package com.kris.study;

public class FreshManA {
    public void time(){
    	System.out.println("預約時間");
    }
}


package com.kris.study;

public class FreshManB {
       public void getReady(){
    	   System.out.println("準備會議室");
       }
}



package com.kris.study;

public class FreshManC {
     public void start(){
    	 System.out.println("舉行會議");
     }
}


package com.kris.study;

public class FreshManD {
     public void summary(){
    	 System.out.println("總結");
     }
}




        Client客戶端:可以直接和Facade交互也可以單獨調用子模塊功能

package com.kris.study;

public class Client {
   public static void main(String[] args) {
	   Facade.kaiHui();
//	   new FreshManA().time();
   }
}

原理分析:

      外觀模式的目的不是給子系統增加新的功能接口,而是爲了讓外部減少與子系統內部多個模塊的直接交互,鬆散耦

合,從而讓外部能夠簡單的使用子系統,並且防止重複調用相同的代碼.所以Facade的方法本身不進行功能的處理,只是

實現一個功能的組合調用。

      外觀模式的本質是:封裝交互,簡化調用


          



     

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章