代理模式

代理模式

为另一个对象提供一个替身或占位符以控制这个对象的访问。

代理模式有很多变体,而这些变体几乎都和控制访问的做法有关。proxy和realObj实现相同的接口,当调用proxy的某一个方法时,proxy作出某种控制,去调用真正的realObj,并将处理结果传给proxy,proxy将结果返回给调用者。这就是代理模式的基本逻辑。

远程代理

当我们想要调用远程的类的方法时,我们先调用本地代理,本地代理帮我们处理网络上的细节,去调用远程机器上的方法,并获取处理结果,本地代理再将处理结果返回给调用方。典型的是RMI远程方法调用。

虚拟代理

当我们想创建一个开销大的对象时,在真正的对象创建完毕前,都由虚拟代理来扮演该对象和请求方交互,一旦对象创建完毕,虚拟代理会将交互直接委托给该对象。比如对象未创建完成时,点击任何操作,都将显示,资源正在加载中。

保护代理

这是一种根据访问权限决定客户是否可以访问对象的一种代理。最典型的是动态代理技术,java内置Proxy类进行动态代理的创建。动态代理之所以被称为动态,是因为运行时才将它的类创建出来,而不是将对象创建出来。

与装饰者模式

装饰者模式是组合对象,并增强该对象的行为,甚至改变对象的行为。代理模式是组合对象,并控制对该对象的访问。前者增强,后者控制。

与适配器模式

适配器模式是将一个接口,转化为不同的接口。代理模式,是将一个接口,通过控制访问相同的接口。前者改变接口,后者控制接口。

总结

为什么要用代理类?不同的目的。

当你需要控制远程的类时,可以用代理类代替远程类,而代理类用来封装网络传输,调用真实类等操作,就好像客户端调用本地类一样调用远程类。

当客户端调用的真实类的初始化很耗资源的时候,在初始化的过程中,可以让代理类和客户端进行交流,不然客户端将因为等待而“卡死”。

当客户端调用真实类的行为需要受到限制的时候,代理类在调用真实类之前可以进行一些过滤,或调用真实类之后可以进行一些其他操作。

。。。

这样的好处是什么?客户端可以和真实类解耦,并能控制客户端对真实类的访问,不论是控制网络细节,还是控制真实类的初始化前给客户的反馈,还是控制真实类的访问权限。即使真实类发生了改变,控制发生改变,客户端也是无感知的,并不需要更改代码。

抽取变化部分:控制方式和真实类是可能改变的,因此抽取出来。这样客户端就不用发生改变。代理外面还可以加代理,这是一种有趣的扩展。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值