外观模式和代理模式(学习笔记)
2010-05-20 09:32 chenbw 阅读(2106) 评论(1) 收藏 举报注:主要参考一些博客园博主资料,在此表示感谢。链接随后补上
主要内容:
1. 外观模式(门面模式)
场景:
一个保安系统由两个录像机、三个电灯、一个遥感器和一个警报器组成。保安系统的操作人员需要经常将这些仪器启动和关闭。
按照我们正常的设计:
用了外观模式:
外观模式:
意图
为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
应用场景:
a) 为一个复杂子系统提供一个简单接口.
b) 提高子系统的独立性.
c) 在层次化结构中,可以使用Facade模式定义系统中每一层的入口。
注意点:
a) 一个系统可以有几个门面类: 在门面模式中,通常只需要一个门面类,并且此门面类只有一个实例,换言之它是一个单例类。当然这并不意味着在整个系统里只能有一个门面类,而仅仅是说对每一个子系统只有一个门面类。或者说,如果一个系统有好几个子系统的话,每一个子系统有一个门面类,整个系统可以有数个门面类。
b) 为子系统增加新行为:通过继承一个门面类便可在子系统中加入新的行为,这是错误的。门面模式的用意是为子系统提供一个集中化和简化的沟通管道,而不能向子系统加入新的行为,只能直接修改门面类。
2. 代理模式:
意图:
通过为对象加一个代理来控制对象的使用,比如:降低对象的使用复杂度、或是提升对象使用的友好度、或是提高对象使用的效率。还有一些情况,一个客户不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
代理种类:
如果按照使用目的来划分,代理有以下几种:
a) 远程(Remote)代理:为一个位于不同的地址空间的对象提供一个局域代表对象。这个不同的地址空间可以是在本机器中,也可是在另一台机器中。远程代理又叫做大使(Ambassador)。
b) 虚拟(Virtual)代理:根据需要创建一个资源消耗较大的对象,使得此对象只在需要时才会被真正创建。
c) Copy-on-Write代理:虚拟代理的一种。把复制(克隆)拖延到只有在客户端需要时,才真正采取行动。
d) 保护(Protect or Access)代理:控制对一个对象的访问,如果需要,可以给不同的用户提供不同级别的使用权限。
e) Cache代理:为某一个目标操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果。
f) 防火墙(Firewall)代理:保护目标,不让恶意用户接近。
g) 同步化(Synchronization)代理:使几个用户能够同时使用一个对象而没有冲突。
h) 智能引用(Smart Reference)代理:当一个对象被引用时,提供一些额外的操作,比如将对此对象调用的次数记录下来等。
UML图:
3. 总结:
Proxy、Facade以及Adapter可能都是对对象的一层封装,侧重点不同。
Proxy基于一致的接口进行封装,接口必须一致,只是对访问进行控制。
Facade针对封装子系统,转化为高层接口,
Adapter的封装是处于适配接口的目的。
5.下次内容:桥接模式(Bridge)和组合模式(Composite),
6.下下次内容:享元模式(FlyWeight)和结构性模式总结(重在对比)
浙公网安备 33010602011771号