一、介绍

1 代理模式(Proxy Pattern)也叫委托模式,是一个使用率非常高的模式。

Provide a surrogate or placeholder for another object to control access to it. 意思是:为其他对象提供一种代理以控制对这个对象的访问。

2 代理模式是一项基本的设计技巧,许多其他的模式,如状态模式、策略模式、访问者模式本质上也采用了代理模式。

二、角色介绍

1 抽象主题(Subject)角色:

该角色是真实主题和代理主题的共同接口,以便在任何可以使用真实主题的地方都可以使用代理主题。

2 代理主题(Proxy Subject)角色:

也叫做委托类、代理类,该角色负责控制对真实主题的引用,负责在需要的时候创建或删除真实主题对象,并且在真实主题角色处理完毕前后做预处理和善后处理工作。

3 真实主题(Real Subject)角色:

该角色也叫做被委托角色、被代理角色,是业务逻辑的具体执行者。

image.png

三、应用

1 、平常使用的一些场景

■ 远程(Remote)代理:
为一个位于不同的地址空间的对象提供一个局部代表对象。这个不同的地址空间可以是在本机器中,也可以在另一台机器中。

■ 虚拟(Virtual)代理:
有时需要创建一些消耗较多资源的对象,可以首先创建代理对象,而将真实对象的创建延迟。例如,加载一个很大的图片,可以通过图片的代理来代替真正的图片。

■ 保护(Protect or Access)代理:
控制对一个对象的访问,如果需要,可以给不同的用户提供不同级别的使用权限。

■ 缓存(Cache)代理:
为某一个目标操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果。

■ 同步(Synchronization)代理:
使几个用户能够同时使用一个对象而没有冲突。

■ 智能引用(Smart Reference)代理:
当一个对象被引用时,提供一些额外的操作,例如,记录访问的流量和次数等。注意在所有种类的代理模式中,虚拟代理、远程代理、智能引用代理和保护代理是最为常见的代理模式。

四、优点

1 职责清晰:

真实的角色实现实际的业务逻辑,不用关心其他非本职的事务,通过后期的代理完成附加的事务,附带的结果就是编程简洁清晰。

2 高扩展性:

具体主题角色随需求不同可能有很多种,但只要实现了接口,代理类就完全可以在不做任何修改的情况下代理各种真实主题角色。

3 智能化:

代理类可以在运行时才确定需要去代理的真实主题,这是一种强大的功能。

五、Mybatis 中代理场景

1 代理图

image.png

2 代理类

image.png