设计模式学习笔记--门面(Facade)模式
2014-04-07 15:48
531 查看
写在模式学习之前
什么是设计模式:在我们进行程序设计时,逐渐形成了一些典型问题和问题的解决方案,这就是软件模式;每一个模式描述了一个在我们程序设计中经常发生的问题,以及该问题的解决方案;当我们碰到模式所描述的问题,就可以直接用相应的解决方法去解决这个问题,这就是设计模式。设计模式就是抽象出来的东西,它不是学出来的,是用出来的;或许你根本不知道任何模式,不考虑任何模式,却写着最优秀的代码,即使以“模式专家”的角度来看,都是最佳的设计,不得不说是“最佳的模式实践”,这是因为你积累了很多的实践经验,知道“在什么场合代码应该怎么写”,这本身就是设计模式。
有人说:“水平没到,学也白学,水平到了,无师自通”。诚然,模式背熟,依然可能写不出好代码,更别说设计出好框架;OOP理解及实践经验到达一定水平,同时也意味着总结了很多好的设计经验,但"无师自通",却也未必尽然,或者可以说,恰恰是在水平和经验的基础上,到了该系统的学习一下“模式”的时候了,学习一下专家总结的结果,印证一下自己的不足,对于提高水平还是很有帮助的。
本系列的设计模式学习笔记,实际是对于《Java与模式》这本书的学习记录。
门面模式的定义
外部与一个子系统的通信必须通过一个统一的门面(Facade)对象进行,这就是门面模式。门面模式提供一个高层次的接口,使得子系统更 易于使用。
注意:门面模式不会为系统增加新的行为,即门面对象不会有子系统中没有的功能。
门面模式的结构
结构图
所涉及的角色
(1)门面(Facade)角色:客户端可以调用这个角色的方法。此角色知晓相关的(一个或多个)子系统的功能和责任。在正常情况下,本角色会将所有从客户端发来的请求委派到相应的子系统去。(2)子系统(SubSystem)角色:可以同时有一个或者多个子系统。每一个子系统都不是一个单独的类,而是一个类的集合。每一个子系统都可以被客户端直接调用,或者被门面角色调用。子系统并不知道门面的存在,对于子系统而言,门面仅仅是另外一个客户端而已。
使用场景
(1)为一个复杂子系统提供一个简单的接口(2)子系统的独立性
(3)层次化结构
门面模式设计
一个保安系统(含2个录像机,3个电灯,1个遥控器和1个警报器),使用门面和不适用门面两种方式。两种类结构图如下。不使用门面模式的结构图:
使用门面模式后的结构图:
更多了解
(1)门面模式,一个非常简单的模式,目的是为了定义统一的访问接口。在日常工作中,应该是经常被使用到的。比如在基于SOA框架的系统开发过程中,每个子系统之间相互都要提供接口,这个接口,可以认为就是门面模式。(2)门面模式,在作为门面对象的同时,还经常兼任代理对象的角色。例如,门面对象可能是一个位于另一个地址空间的子系统的远程代理;可能兼任保护代理的角色,检查调用者的权限;可能负责记录子系统被调用的次数,因而兼任智能引用代理的角色;可能兼任虚拟代理的角色,特别是当子系统加载耗费时间和资源的时候。
结构模式(Structural Pattern)小结
结构模式(Structural Pattern)一共有七种,分别是:适配器模式、装饰模式、合成模式、代理模式、享元模式、门面模式、桥梁模式。大致总结如下:
最大特点 | 典型应用 | |
适配器模式 | 利用对象的功能,并转换其接口 | 日常工作,入目尽是适配器,DAO适配,Cache功能适配,等等 |
装饰模式 | 对象层面的功能增强,接口不变 | Java I/O类库的设计 |
合成模式 | 树枝、叶子同样对待 | 分类树、权限树等 |
代理模式 | 代表人 | WebService 的本地代理,权限访问代理,引用计数代理等 |
享元模式 | 共享对象,减小内存占用 | 编译器系统,Java String |
门面模式 | 统一对外接口,方便调用 | 基于SOA框架编程中,不同系统之间的接口 |
桥梁模式 | 解耦 | 大多数的驱动器,包括JDBC Driver |
相关文章推荐
- 实现tip浮层
- Cocoa 框架 For iOS(一) 框架的介绍,Objectivie-C运行时能力的解析等
- kX3552常用插件集
- SendMessage和PostMessage发送消息(不同进程传递字符串)
- 对输入单词长度输出垂直直方图
- VC 无边框对话框的任务栏右键菜单
- How to create a bootable USB stick on Mac OS X
- Mysql储存时间选择怎样的字段类型
- vtk读取obj文件和贴图
- 基于注解方式的Filter执行顺序
- windows访问linux共享文件夹
- 我的欧拉工程之路_12
- OM设置摘要知识点
- iOS开发(7)通过uiimageView浅谈UIView
- Opengl RC(Render context,渲染下下文)与像素格式(转)
- Android四大组件之Service
- 网络小组学习计划
- python 获取当前运行的类名函数名
- 抓到网页数据后编码转换
- FORCEINLINE 关键字