在閻宏博士的《JAVA與模式》一書中開頭是這樣描述門面(Facade)模式的:
門面模式是對象的結構模式,外部與一個子系統的通信必須通過一個統一的門面對象進行。門面模式提供一個高層次的接口,使得子系統更易於使用。
門面模式有三個角色組成:
1) 門面角色( facade ):這是門面模式的核心。它被客戶角色調用,因此它熟悉子系統的功能。它內部根據客戶角色已有的需求預定了幾種功能組合。
2) 子系統角色:實現了子系統的功能。對它而言, façade 角色就和客戶角色一樣是未知的,它沒有任何 façade 角色的信息和鏈接。
3) 客戶角色:調用 façade 角色來完成要得到的功能
模式作用:
將一些復雜的操作封裝起來,以一個簡單的接口提供給客戶端.
可以定義多個子系統, 層次之間的粗細粒度需要把握好.一個子系統一個門面類
1 2 public static void main(String[] args) { 3 4 //正常調用 5 A a = new A(); 6 a.test(); 7 B b = new B(); 8 b.test(); 9 //...... 10 //上述帶來的問題是調用者需要去了解所有的子系統 11 //門面模式 12 Fade fade =new Fade(); 13 fade.testA(); 14 fade.testB(); 15 fade.testC(); 16 //通過門面模式避免了客戶端去了解各個子系統 17 18 } 19 20 } 21 22 class Fade { 23 24 public void testA() { 25 A a = new A(); 26 a.test(); 27 } 28 public void testB() { 29 B b = new B(); 30 b.test(); 31 } 32 public void testC() { 33 C c = new C(); 34 c.test(); 35 } 36 } 37 38 class A { 39 40 public void test() { 41 System.out.println("訪問a"); 42 } 43 } 44 45 class B { 46 47 public void test() { 48 System.out.println("訪問b"); 49 } 50 } 51 52 class C { 53 54 public void test() { 55 System.out.println("訪問c"); 56 } 57 }
再舉一個實際例子,我們去商場買衣服,吃飯,都是通過商場這個門店一步到位搞定
class ClothingCenter{ //有沒有點代理模式的影子 public void sellClothing(){ beforeClothing(); System.out.println("成交衣服"); afterClothing(); } //屏蔽了一些細節 private void beforeClothing(){ System.out.println("進貨衣服"); } private void afterClothing(){ System.out.println("打包衣服"); } } class EatCenter{ public void eat(){ order(); cooking(); System.out.println("吃飯"); } private void cooking(){ System.out.println("端上來"); } private void order(){ System.out.println("下單"); } } //調用 ShoppingFade shoppingFade=new ShoppingFade(); shoppingFade.buyClothing();//買衣服 shoppingFade.eatSomething();//吃飯
門面模式與中介者模式區別
1。門面模式是結構型模式,中介者模式是行為型模式。
2。門面模式是對子系統提供統一的接口,中介者模式是用一個中介對象來封裝一系列同事對象的交互行為。
3。門面模式協議是單向,中介者模式協議是雙向。
4。門面模式所有的請求處理都委托給子系統完成,而中介者模式則由中心協調同事類和中心本身共同完成業務。
參考地址:
http://www.cnblogs.com/java-my-life/archive/2012/05/02/2478101.html
