第11讲Facade外观模式.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第11讲Facade外观模式

第11讲:Facade 外观模式 2006.3.10 李建忠 系统的复杂度 假设我们需要开发一个坦克模拟系统用于模拟坦克车在各种作战环境中的行为,其中坦克系统由引擎、控制器、车轮、车身等各子系统构成。 ? 如何使用这样的系统 ? 动机(Motivation) 上述A方案的问题在于组件的客户(即外部接口,或客户程序)和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合面临很多变化的挑战。 如何简化外部客户程序和系统间的交互接口?如何将外部客户程序的演化和内部子系统的变化之间的依赖相互解耦? ? 意图(Intent) 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 ——《设计模式》GoF ? 例说Facade应用 以前面的例子为例 我们所说的接口其实并不一定是Interface,只要是Public方法,能被外部调用的方法都叫接口,这里的定义其实是更加广义的接口定义,即露在外面和外界所交互的这一部分。 这里主系统和子系统之间的关系不是继承关系,而应该是一种包含的关系。 这样在外部使用的时候只能使用TankFacade类和里面的Start、Stop等方法,其他子系统都被包含在内部了。这样减轻了使用的复杂度,客户程序只用关心TankFacade,而不用关心里面的子系统情况。更重要的是,这样的设计有效地把客户程序和子系统解耦。 ? 结构(Structure) 这种结构不仅体现了类的单一职责原则,而且也体现了开放封闭原则。而且子系统和系统之间是个组合关系,而不是继承关系。高层总是相对稳定,低层总是相对易变。所以我们应该尽量依赖高层抽象,而不是低层细节实现。 ? Facade模式的几个要点 从客户程序的角度来看,Facade模式不仅简化了整个组件系统的接口,同时对于组件内部与外部客户程序来说,从某种程度上也达到了一种“解耦”的效果——内部子系统的任何变化不会影响到Facade接口的变化。 Facade设计模式更注重从架构的层次去看整个系统,而不是单个类的层次。Facade很多时候更是一种架构设计模式。 注意区分Facade模式、Adapter模式、Bridge模式与Decorator模式: Facade模式注重简化接口 Adapter模式注重转换接口 Bridge模式注重分离接口(抽象)与其实现 Decorator模式注重稳定接口的前提下为对象扩展功能 ? .NET架构中的Facade应用 假如我们做一个网上购物系统,考虑它的认证系统。用户权限不同,能做的事情也不同,它可能会调用各种各样的子系统。认证系统里面也可能包含很多子系统,比如第三方认证等等。这些认证子系统合作起来丰富了我们网站的功能,那么这种情况我们就可以考虑把认证的各个子系统封装成一个认证系统。 如果我们想做跨平台的及时聊天工具,我们也可以用一个Facade封装某个平台系统的API接口。这样我们在使用API的时候,就不需要去关心平台内部的变化。

文档评论(0)

haocen + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档