浅谈代理模式

Posted Fire king

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈代理模式相关的知识,希望对你有一定的参考价值。

代理模式:
原因:无法直接访问某个对象或者访问某个对象存在困难时可以通过一个代理对象存在困难时可以通过一个代理对象来直接访问。
2.如何使用代理模式:
2.1.明确被代理的对象,为了实现拓展以及客户端调用代理对象的方法就能间接调用被代理的对象的同名方法,往往会抽象出一个“接口”,这个接口不仅仅只是严格意义上的接口,也可以是抽象类,产物:抽象主题角色,数量:一个。
2.2.具体代理的对象,继承或实现自抽象主题角色,实现客户端想要访问的功能,产物:真实主题角色,数量:多个。
2.3.作为连接真实主题角色和客户端的桥梁,能被客户端访问,同时实现抽象主题角色的方法,产物:代理主题角色,数量:一个。
强制代理模式的思想:
如果真实主题角色没有注册代理,客户端直接访问真实主题角色某个方法就会访问不了,这时就需要在真实主题角色中对代理主题角色的引用进行判空。如果要在真实主题角色中注册代理,可以通过set方法进行赋值,同时调用代理主题角色中赋值与真实主题角色引用的方法,将本对象作为参数传递过去即可。
3.模式优缺点
代理模式的优点
代理模式能够协调调用者和被调用者,在一定程度上降低了系统的耦合度。
远程代理使得客户端可以访问在远程机器上的对象,远程机器可能具有更好的计算性能与处理速度,可以快速响应并处理客户端请求。
虚拟代理通过使用一个小对象来代表一个大对象,可以减少系统资源的消耗,对系统进行优化并提高运行速度。
保护代理可以控制对真实对象的使用权限。

4.模式适用环境
根据代理模式的使用目的,代理模式有以下几种类型(续):
保护(Protect or Access)代理:控制对一个对象的访问,可以给不同的用户提供不同级别的使用权限。
缓冲(Cache)代理:为某一个目标操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果。
防火墙(Firewall)代理:保护目标不让恶意用户接近。
同步化(Synchronization)代理:使几个用户能够同时使用一个对象而没有冲突。
智能引用(Smart Reference)代理:当一个对象被引用时,提供一些额外的操作,如将此对象被调用的次数记录下来等。
5.总结:
在代理模式中,要求给某一个对象提供一个代理,并由代理对象控制对原对象的引用。代理模式的英文叫做Proxy或Surrogate,它是一种对象结构型模式。
代理模式包含三个角色:抽象主题角色声明了真实主题和代理主题的共同接口;代理主题角色内部包含对真实主题的引用,从而可以在任何时候操作真实主题对象;真实主题角色定义了代理角色所代表的真实对象,在真实主题角色中实现了真实的业务操作,客户端可以通过代理主题角色间接调用真实主题角色中定义的方法。
代理模式的优点在于能够协调调用者和被调用者,在一定程度上降低了系统的耦合度;其缺点在于由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢,并且实现代理模式需要额外的工作,有些代理模式的实现非常复杂。
远程代理为一个位于不同的地址空间的对象提供一个本地的代表对象,它使得客户端可以访问在远程机器上的对象,远程机器可能具有更好的计算性能与处理速度,可以快速响应并处理客户端请求。
如果需要创建一个资源消耗较大的对象,先创建一个消耗相对较小的对象来表示,真实对象只在需要时才会被真正创建,这个小对象称为虚拟代理。虚拟代理通过使用一个小对象来代表一个大对象,可以减少系统资源的消耗,对系统进行优化并提高运行速度。
保护代理可以控制对一个对象的访问,可以给不同的用户提供不同级别的使用权限。

以上是关于浅谈代理模式的主要内容,如果未能解决你的问题,请参考以下文章

浅谈源码的七大设计模式

浅谈代理模式

浅谈-Java设计模式之动态代理

浅谈设计模式之代理模式(proxy)

Swift语言精要 - 浅谈代理模式(Delegate)

浅谈AOP和代理模式