【转】设计模式学习笔记(10)-外观
外观(Facade)模式十分简单常见。何谓外观?Facade我觉得翻译成门面更合适,门面就是摆在大街上给大家看的,你要买什么东西别人一看也就知道了,而门面内部呢?可能是厨房卧室之类的,这些是不对外开放的,一般顾客是无法访问的。这就是Facade,为子系统的一组接口提供一个一致的界面。
Facade为外界访问子系统提供了十分简洁的接口,它将客户程序的请求转发给子系统处理,再将子系统返回的结果交给客户程序。对于客户程序来说根本不需要知道子系统内部是如何处理与协作的。《设计模式》中举了一个编译器的例子,对于一个编译器程序,其内部结构是十分复杂的,包括词法分析,转换程序,汇编程序,机器码生成程序等,但对于用户来说我们一般不用了解内部是怎么工作的,我们一般只是敲入:
|
1
|
gcc XXX.c -o XXX.exe |
编译器就将结果直接返回了。这个傻瓜式的接口就是Facade。我依然记得在刚开始学习C语言的时候,老师往往教导我们要编译再连接:
|
1
2
|
cl XXX.clink 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) 收藏 举报

浙公网安备 33010602011771号