《JAVA與模式》之門面模式


在閻宏博士的《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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM