调侃《Head First设计模式》之外观模式

        上一篇谈了适配器模式,主要用于转换类的接口,今天谈外观模式,主要用于简化类的接口。照惯例由故事入手。

       现在你要建立自己的家庭电影院,你心目中完美的家庭影院系统包括:DVD播放器、投影机、自动屏幕、环绕立体声甚至还有爆米花机。

       看下这些组件的类图:

      

   现在你好不容易将整个系统连起来了,准备播放电影了,播放电影你要执行以下步骤:

   

   用代码实现就是:

   

     这时候你应该很烦了:看个电影要打开这么多开关真TM烦!而且看完电影后还要把开关都关一遍,甚至听cd都很麻烦。怎么办呢?

     解决方案很简单,你需要的只是增加一个类将各种开关接口包装起来。如图HomeTheaterFacade类:

     

     

     HomeTheaterFacade对外暴露几个接口,每个接口均是是对各种组件类的接口做相应的封装,之前调用的一系列方法现在一个方法搞定。具体类:

     

    比如看电影相关方法:

    

    调用一个方法实质调用了很多组件的开关方法。很方便是不?

   客户端只要把各个组件的对象引用传入HomeTheaterFacade类就行了。

   来看官方定义:

   外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。

   类图如下:

   


     外观模式不仅简化了接口,还将客户从组件的子系统中解耦。另外的一个好处是,外观在简化接口的同时,仍然将系统完整暴露出来,只要有需要,客户端依然可以直接使用子系统的类。

     提到外观模式,就不得不提一个重要的OO原则:

     “最少知识”原则:只和你的密友谈话。

     它告诉我们,不要让太多类相互依赖,不然系统会成为一个易碎的系统,需要花费很多成本维护。

     这个原则提供了一个方针避免类依赖:对于一个对象来说,我们只应该调用属于以下范围的方法:

    1.该对象本身的方法。

    2.方法参数传进来的对象的方法。

    3.该对象方法创建的对象的方法。

    4.对象的成员变量对象的方法。

    这个方针告诉我们,不要调用其他方法返回的对象的方法。

     

       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值