Programming 版 (精华区)

发信人: Sun (大灯泡), 信区: SoftEng
标  题: [Design Pattern] Facade
发信站: 哈工大紫丁香 (2001年03月24日19:16:59 星期六), 站内信件

发信人:Crystal_Y (小衲)  版面名称:SoftEng(958)
标 题:[Design Pattern] Facade
发信站:中国科大BBS站 (Fri, 23 Mar 2001 12:37:18 )
标 记:精华
  Facade就是一个系统的门面,强调的是隐藏

  如同一个银行,内部有很多部门,储蓄、贷款、卡部、网络等等等等,
而我们看到的,只是一排柜台,柜台上的窗口,和窗口后面的服务员。这
些服务员提供了银行所能提供的全部服务,顾客只要和她们打交道就可以
了。银行内部发生了机构改革,人事变动,只要这个Facade不变,我们到
银行所要进行的操作亦不会改变。有趣的是,这个Facade并不妨碍有关系
的人绕过这个门面,他们仍然可以直接和银行内部的各个部门打交道,呵
呵。

  在设计一个系统的时候,划分了系统的边界,确定了系统与
environment之间的接口,那么下一步就要对系统进行refinement,在细化
的过程中,会发现很多接口上的操作只是对系统里面某个部分而言的,这时
就会逐渐地把系统划分成各个子系统,如此进行下去,正是软件设计的一
个基本过程。那么,当初在设计时发现的子系统与外界的直接联系,是不
是一定要在最后的系统中原封不动地保留呢?这样的做法,第一使得外界
client使用这个系统变得复杂起来,它要和各个子系统打交道;第二不利于
这个系统将来的变化,因为各个子系统与client存在coupling。于是我们设
计一个系统的Facade,client通过它在自己不知道的情况下间接地使用了
各个子系统。

  把一个system和一个class作类比,class中有公有成员,也有私有成
员,如果client不希望直接访问它的公有成员,那么class可以提供一个接
口函数,让client通过它访问。那么一个system里与client有联系的
subsystem就类似于一个class的公有成员,现在client通过Facade访问它
们。

  class可以声明private隐藏私有成员,system怎么使用namespace隐
藏一些class呢?谁来给个例子吧。如果system不作隐藏,假如直接访问
有很大的好处,那么client还是可以直接访问到subsystem的。

  Facade的结构图倒是很泛,不像其它的Pattern

  URL http://202.38.79.111/GoF/pat4efs.htm

--
※ 来源: 中国科大BBS站 [bbs.ustc.edu.cn]



--
    我很差劲!
    我是一个不务正业的人!
    因为,在我这个年纪,
    正业是找女朋友。

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: sunner.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:8.256毫秒