《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

 

 

posted @ 2014-06-18 16:51  draem0507  阅读(3008)  评论(0编辑  收藏  举报
View Code