外观模式(Facade Pattern)或门面模式
来源:互联网 发布:windows 8 whql 编辑:程序博客网 时间:2024/04/29 02:05
设计原则
最少知识原则:只和你的密友谈话
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、在不引入抽象外观类的情况下,增加新的子系统可能需要修改外观类或客户端的源代码,违背了“开闭原则”
外观模式和适配器模式
外观模式和适配器模式的差异,在于它们的意图。
适配器模式的意图是,改变接口以符合客户的期望。
而外观模式的意图是,提供子系统的一个简化接口。
0 0
- facade pattern--门面模式或外观模式
- 外观模式(Facade Pattern)或门面模式
- 外观模式/ 门面模式(Facade Pattern)
- Facade 外观(门面)模式
- 外观/门面模式(Facade)
- 门面模式(facade pattern)
- 门面模式(Facade Pattern)
- 门面模式(Facade Pattern)
- 门面模式(外观模式):Facade
- Facade(外观模式,门面模式)
- Java Facade (外观模式、门面模式)
- 8.外观模式/门面模式(Facade)
- 门面模式(Facade pattern)
- 门面模式【FACADE PATTERN 】
- 门面模式(Facade Pattern)
- Facade Pattern 门面模式
- 门面模式【Facade Pattern】
- 门面模式【Facade Pattern】
- 深度学习在自然语言处理的应用
- ios随记(按钮取消高亮)
- C语言函数调用及栈帧分析
- 深度学习为何起作用——关键解析和鞍点
- JS代码放在head和body的区别
- 外观模式(Facade Pattern)或门面模式
- 设计模式 抽象工厂模式(Abstract Factory Pattern)
- 【郝斌数据结构自学笔记】10-11_跨函数使用内存讲解及其示例
- 比较全面的gdb调试命令
- ios 长时间后台
- C/C++内存管理详解
- KDnuggets热门深度学习工具排行:Pylearn2 居首,Caffe第三
- List对象排序 遇到的问题
- ubuntu 交叉编译x264 faac ffmpeg