访问控制
1)代理(Proxy)模式使一个组件的客户机与一个组件代表通信,而不是组件本身。
2)外观(Facade)模式为子系统中的一组接口提供了统一接口。
3)迭代器(Iterator)模式提供了连续访问一个聚集对象的成员,而不暴露其基础表示的方法。
代理模式结构
原件(original)实现一个特别的服务。这种服务包括从诸如返回或显示数据的简单操作到复杂的数据检索功能或包含深一层组件的计算。
客户机(client)对特定的任务负责。为完成客户机的工作,它以一种访问代理的间接方式调用原件的功能。
代理(proxy)提供了和原件相同的接口,而且保证了对原件的正确访问。为完成这种功能,代理保持对它所表示的原件的引用。
抽象原件(abstract original)提供了通过代理和原件实现的接口。
实现
1)为处理对一个组件的访问控制确定所有职责。将这些职责依附在一个单独的组件——代理上。
2)如果可能,引入一个抽象基类来详细说明代理和原件两种接口的共同部分。从这种抽象基类导出代理和原件。如果代理和原件之间的相同接口是不可行的,那么可以使用一个适配器来保证接口的适应性。使代理接口适应原件接口会让客户机以为有相同的接口,用于适配器和原件的一个公共基类或许也是可能的。
3)实现代理的功能。
4)解除原件及其客户机所承担的现已迁移到代理中的职责。
5)通过给代理一个指向原件的句柄将代理和原件关联起来。
6)删除原件及其客户机之间所有的直接关联。
变体
1)远程代理。远程组件的客户机应该与网络地址和进程间通信协议相屏蔽。
2)保护代理。必须防止越权访问组件。
3)缓存代理。多重本地客户机可以共享远程组件传回的结果。
4)同步代理。必须同步对一个组件的多重同时访问。
5)计数代理。必须防止组件的偶然删除,或者收集使用情况的统计数字。
6)虚拟代理。处理或装入一个组件的代价是昂贵的,但该组件的部分信息可能就已足够了。
7)防火墙代理。本地客户机应该与外部世界相隔离。
优点
1)提高效率和降低成本。
2)将服务器组件的位置与客户机相分离。
3)将内务处理代码从功能中分离出来。
不足
1)间接方法导致低效率。
2)过分采用复杂策略。