注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

东东的博客

江南烟雨,同大家一起分享

 
 
 

日志

 
 

设计模式读书笔记之外观模式/门面模式(Facade)  

2010-07-13 19:48:57|  分类: 设计模式相关 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

门面模式:为多个子系统提供统一的高层接口,以降低客户对子系统的依赖, 减少客户使用子系统的难度.

门面模式是一个名字和描述都让人感觉很难的模式,我也曾经被它的名字吓倒过。其实门面模式很简单, 就是要把下面的左图结构变为右图结构。

基础代码:


view plaincopy to clipboardprint?
//子系统1  
package designpattern.facade;  
public class SubSystem1 {  
    public void method1(){  
        //  
    }  
    public void method2(){  
        //  
    }  
    public void method3(){  
        //  
    }  
}  
//子系统2  
package designpattern.facade;  
public class SubSystem2 {  
    public void method1(){  
        //  
    }  
    public void method2(){  
        //  
    }  
    public void method3(){  
        //  
    }  
}  
//子系统3  
package designpattern.facade;  
public class SubSystem3 {  
    public void method1(){  
        //  
    }  
    public void method2(){  
        //  
    }  
    public void method3(){  
        //  
    }  
}  
//门面  
package designpattern.facade;  
public class Facade {  
    private SubSystem1 sub1;  
    private SubSystem2 sub2;  
    private SubSystem3 sub3;  
    public Facade(SubSystem1 sub1, SubSystem2 sub2, SubSystem3 sub3){  
        this.sub1 = sub1;  
        this.sub2 = sub2;  
        this.sub3 = sub3;  
    }  
    public void doThis(){  
        sub1.method1();  
        sub2.method1();  
        sub3.method1();  
    }  
      
    public void doThat(){  
        sub2.method2();  
        sub3.method3();  
        //......  
    }  
}  
//客户/上下文  
package designpattern.facade;  
  
public class Client {  
    private Facade facade;  
    public Client(Facade f){  
        this.facade = f;  
    }  
    public void doSomething(){  
        facade.doThat();  
        //facade.doThis();  
        //.....  
    }  
}  

举一例: 汽车分好多子系统: 发动机, 刹车系统, 变速系统, 电子系统..... 如果司机在开车的时候要直接和这些子系统打交道, 那这个车没办法开了,因为这个难度太大. 于是于是有了驾驶室这个操作平台, 由驾驶室里面的油门, 刹车, 换档把手, 手札, 开关按钮来和这些子系统打交道. 而客户(即驾驶员)只需要坐在驾驶室里就可以操控整个车. 这个驾驶室就是这整个汽车全部系统的门面.

特点:

1 外观类持有各个子系统的引用;

2 外观类通过调用各个子系统的功能来为用户提供高层接口.

适应场景: 子系统比较多而且复杂

  评论这张
 
阅读(587)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017