代理模式(Proxy):为另一个对象提供一个替身或占位符以控制对这个对象的访问。
UML类图:
Subject为RealSubject和Proxy提供了统一的接口,Proxy就是RealSubject的代理。RealSubject是真正做事的对象,是被Proxy代理和控制访问的对象。Proxy持有RealSubject的引用,客户想与RealSubject交互的话,必须经过Proxy代理。
上面就是代理模式的一般形式,但代理模式有许多变体。典型的有远程代理、虚拟代理和保护代理。
1 远程代理控制访问远程对象
如Web Service便是用远程代理的形式。
2 虚拟代理控制访问创建开销大的资源
开销大,可能是网络请求流量大、耗时长,也可能是IO读写满等等。比如,网页中的图片对象,由于图片请求比较耗时,但为了兼顾排版美观,就先用于图片大小一致的方框占位,等图片下载好后,填充到占位的地方,这便是一种虚拟代理。
3 保护代理基于权限控制对资源的访问
4 智能引用代理(Smart Reference Proxy),在调用真实对象时,代理处理另外一些事。如计算真实对象的引用次数,这样当该对象没有引用时,可以自动释放它。(看来GC就是这类啊)
另外,还有许多种代理的变体,比如防火墙代理(Firewall Proxy),控制网络资源的访问,保护主体免于“坏客户”的侵害;缓存代理(Caching Proxy)为开销大的运算结果提供暂时存储,它也允许多个客户共享;同步代理(Synchronization Proxy)在多线程的情况下为主体提供安全的访问等等,好深奥,好好学。
这节没有代码,后续深入学习web service。