外观模式(Facade Pattern)或门面模式
2015-11-16 10:02
274 查看
设计原则
最少知识原则:只和你的密友谈话
Facade模式概述
实际应用中,我们在对付一些老旧的code(尤其是将C的代码转成C++代码)或者即便不是老旧code,但涉及多个子系统时,除了重写全部代码(对于老旧code而言),我们还可能采用这样一种策略:重新进行类的设计,将原来分散在源码中的类/结构及方法重新组合,形成新的、统一的接口,供上层应用使用。
这在某种意义上与Adapter及Proxy有类似之处,但是,Proxy(代理)注重在为Client-Subject提供一个访问的中间层,如CORBA可为应用程序提供透明访问支持,使应用程序无需去考虑平台及网络造成的差异及其它诸多技术细节;Adapter(适配器)注重对接口的转换与调整;而Facade所面对的往往是多个类或其它程序单元,通过重新组合各类及程序单元,对外提供统一的接口/界面。
应用场景
1、当你要为一个复杂子系统提供一个简单接口时。子系统往往因为不断演化而变得越来越复杂。大多数模式使用时都会产生更多更小的类。这使得子系统更具可重用性,也更容易对子系统进行定制,但这也给那些不需要定制子系统的用户带来一些使用上的困难。
Facade可以提供一个简单的缺省视图,这一视图对大多数用户来说已经足够,而那些需要更多的可定制性的用户可以越过Facade层。
2、客户程序与抽象类的实现部分之间存在着很大的依赖性。引入Facade将这个子系统与客户以及其他的子系统分离,可以提高子系统的独立性和可移植性。
3、当你需要构建一个层次结构的子系统时,使用Facade模式定义子系统中每层的入口点,如果子系统之间是相互依赖的,你可以让它们仅通过Facade进行通讯,从而简化了它们之间的依赖关系。
优点
1、引入外观模式,是客户对子系统的使用变得简单了,减少了与子系统的关联对象,实现了子系统与客户之间
的松耦合关系。
2、只是提供了一个访问子系统的统一入口,并不影响用户直接使用子系统类
3、降低了大型软件系统中的编译依赖性,并简化了系统在不同平台之间的移植过程
缺点
1、不能很好地限制客户使用子系统类,如果对客户访问子系统类做太多的限制则减少了可变性和灵活性
2、在不引入抽象外观类的情况下,增加新的子系统可能需要修改外观类或客户端的源代码,违背了“开闭原则”
外观模式和适配器模式
外观模式和适配器模式的差异,在于它们的意图。适配器模式的意图是,改变接口以符合客户的期望。
而外观模式的意图是,提供子系统的一个简化接口。
相关文章推荐
- 比较全面的gdb调试命令
- Android之Activity启动
- PHP 底层的运行机制与原理
- 正则验证IPV4的地址
- JS代码放在head和body的区别
- 好用的局域网共享工具
- 简单实现限制uploadify上传个数
- 深度学习为何起作用——关键解析和鞍点
- ios随记(按钮取消高亮)
- git clone错误提示不能顺利结束,错误码128
- 前端mvc目录设计的思考
- 跟我学习javascript的隐式强制转换
- 解决本地计算机 上的 OracleOraDb10g_home1TNSListener服务启动后停止
- linux热插拔
- C语言函数调用及栈帧分析
- Ubuntu命令
- 深度学习在自然语言处理的应用
- EyeKey:Engineer,SDCC大会A06展位刷脸约!
- 【知识】【HTML基础知识】修改checkbox-----增加相关协议
- OpenAM Authorization Manual