首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

设计方式学习十五:代理模式

2012-07-05 
设计模式学习十五:代理模式一.概念???? 代理模式:为对象提供一种代理,以控制这个对象的访问。?二.UML?Subje

设计模式学习十五:代理模式

一.概念

???? 代理模式:为对象提供一种代理,以控制这个对象的访问。

?

二.UML

?

设计方式学习十五:代理模式

    Subject:定义RealSubject和Proxy的共同接口,这样在任何使用RealSubject的地方都可以使用Proxy。RealSubject:定义Proxy所代表的实体。Proxy:代理类,保存一个实体对象的引用,代理委托实体做事。

三.实例分析

???? 在深圳这个神奇的国度里,最有钱的其实是那些房东。这还得感谢我们伟大的小 平同志。以前不值钱的房子,现在租客多了,原地随便盖个十几层,一年下来百来万是一点问题都没有的。房东是基本不出现的,整个租房,收钱都是别人在帮他搞,也就是我们说的房屋中介。

设计方式学习十五:代理模式

?

???? Renter

package com.zzy.proxy;/** * 租客接口 * @author eason * */public interface Renter {//租房void rent();//收房租void getMoney();}

?

??? HouseOwner

package com.zzy.proxy;/** * 房主 * 真实对象 * 被代理对象 * @author eason * */public class HouseOwner implements Renter{@Overridepublic void getMoney() {System.out.println("收取房租100W");}@Overridepublic void rent() {System.out.println("出租房屋一年");}}

?

?? Agency

package com.zzy.proxy;/** * 房屋中介 * 代理对象 * @author eason * */public class Agency implements Renter{private HouseOwner houseOwner;//客户端不需要HouseOwner实例//客户因为Agency就是HouseOwnerpublic Agency() {this.houseOwner = new HouseOwner();}@Overridepublic void getMoney() {houseOwner.getMoney();}@Overridepublic void rent() {houseOwner.rent();}}

?

? ? ProxyTest

package com.zzy.proxy;/** * 测试类 * @author eason * */public class ProxyTest {public static void main(String[] args) {Agency agency = new Agency();agency.rent();agency.getMoney();}}
?

?

四.使用场景及使用感受

    必须记住的一句话是:代理模式是控制对RealSubject的访问。有那些情况我们需要控制对RealSubject的访问呢?RealSubject是远程对象(RMI),你根本访问不到;RealSubject创建开销大;RealSubject需要被保护等等。上面演示的是一个最简单的,最直接的代理模式。真实世界里面的代理模式有很多种变体,这些变体都有一个共同点:都会将客户对主题的方法拦截下来。
防火墙代理(Firewall Proxy):控制网络资源的访问,保护主题免于"坏客户"的侵害。智能引用代理(Smart Reference Proxy):当主题被引用时,就行额外的动作,例如计算一个对象被引用的次数。缓存代理(Caching Proxy):为开销大的运算结果提供暂时存储,它也允许多个客户共享结果,以减少计算或网络延迟。同步代理(Synchronization Proxy):在多线程的情况下提供安全的访问。复杂隐藏代理(Complexity Proxy):用来隐藏一个类的复杂集合的复杂度,并进行访问控制。有时候也称为外观代理(Facade Proxy)。区别外观代理模式和外观模式:外观代理模式归根到底还是代理模式,是代理模式就是为了控制访问,而外观模式只提供另外一组接口。写入时复制代理(Copy-On-Write Proxy):用来控制对象的复制,方法是延迟对象的复制,直到客户真的需要为止。

?

热点排行