【转】设计模式学习笔记(10)-外观

外观(Facade)模式十分简单常见。何谓外观?Facade我觉得翻译成门面更合适,门面就是摆在大街上给大家看的,你要买什么东西别人一看也就知道了,而门面内部呢?可能是厨房卧室之类的,这些是不对外开放的,一般顾客是无法访问的。这就是Facade,为子系统的一组接口提供一个一致的界面

这里有一个十分形象的图可以解释这种情况:

Facade为外界访问子系统提供了十分简洁的接口,它将客户程序的请求转发给子系统处理,再将子系统返回的结果交给客户程序。对于客户程序来说根本不需要知道子系统内部是如何处理与协作的。《设计模式》中举了一个编译器的例子,对于一个编译器程序,其内部结构是十分复杂的,包括词法分析,转换程序,汇编程序,机器码生成程序等,但对于用户来说我们一般不用了解内部是怎么工作的,我们一般只是敲入:

 

1
gcc XXX.c -o XXX.exe

编译器就将结果直接返回了。这个傻瓜式的接口就是Facade。我依然记得在刚开始学习C语言的时候,老师往往教导我们要编译再连接:

1
2
cl XXX.c
link XXX.obj

 

要分两步,不如第一个那样简单了。当然Facade不是完全隔绝了内外系统的联系,只留下惟一一个关隘,Facade允许客户程序绕过其直接访问子系统以获得更灵活的功能。比如在gcc中可以这样取得中间目标文件:

1
gcc -c XXX.c

或者这样取得汇编后的代码

1
gcc -S XXX.c

这样既满足普通用户的需求,又满足了高级用户的需要。

Facade模式使用很普遍,而且也没有固定形式。不仅仅是在面向对象程序设计中,在整个系统架构上的也是十分常见的。本文就不举出代码了。

来看看Facade模式的适用性:

  • 当你要为一个复杂的子系统提供一个简单接口时
  • 客户程序与抽象类的实现部分之间存在很大的依赖性
  • 当你需要构建一个层次结构的子系统时,使用Facade模式定义子系统中每层的入口点

其实我们看所有的设计模式都有着相同的目的,解耦。Facade简化了接口,与具体实现分离这样便达到了解耦的目的,这在分层程序设计如MVC等设计模式中十分常见。

 

 

原文: http://lecoding.com/articles/211.html

posted on 2013-03-05 15:01  TheKingOfKingFish  阅读(104)  评论(0)    收藏  举报

导航