Facade模式

Posted on 2007-11-20 14:37 game of programming 阅读(940) 评论(0)  编辑  收藏 所属分类: Design Pattern

在《设计模式》一书中,Facade模式的意图是:为子系统中的一组接口提供一个统一接口,Facade模式定义了一个更高层的接口,使子系统更加容易使用。

Facade模式的UML图如下所示:



如图所示,Facade向下调用SubSystem所提供的功能(并非全部功能,而是部分功能)。TargetSystem则通过Facade提供的接口来调用SubSystem所提供的功能。这样TargetSystem无需知道SubSystem所提供的所有功能及其细节,只需知道Facade所提供的接口即可。Facade存在的目的就是为TargetSystem提供更简单的接口。
Facade的使用非常普遍。比如在调用第三方软件库时,一般不会用到该软件库所提供的所有的接口,而是使用一个Facade类,来包装我们所用到的接口。然后在程序中直接调用Facade所提供的接口即可。
下图是一个调用dom4j的Facade的例子。

在XmlFacade中,会使用到Document、Element和Attribute三个由dom4j所使用到的类/接口,而不使用其他dom4j提供的接口。这样在BusinessClass中只需要调用XmlFacade中所提供的接口即可。
同时,Facade模式还能减少客户所需要处理的对象数量。比如在上图中,假设有2个BusinessClass,而这两个BusinessClass都需要调用Document、Element和Attribute。如果没有XmlFacade类,那么这两个BusinessClass都需要分别new一个Document、Element和Attribute类。这样,就需要生成一共6个新实例(Document、Element和Attribute类每个分别为2个)。如果通过XmlFacade类,则每个Document、Element和Attribute类仅需要一个实例,也就是一共需要3个新的实例而已。

只有注册用户登录后才能发表评论。


网站导航:
 

posts - 2, comments - 1, trackbacks - 0, articles - 5

Copyright © game of programming