代理模式
定义
代理模式(Proxy),为其他对象提供一种代理以控制这个对象的访问。代理就是真实对象的代表。
UML结构图
基本代码的实现
Subject
类 抽象主体类,定义一个request
请求的抽象方法。
/**
* @create on 2020/7/5 22:46
* @description 抽象主体
* @author mrdonkey
*/
abstract class Subject {
abstract fun request()
}
RealSubject
真实的主体
/**
* @create on 2020/7/5 22:48
* @description 真实的实体
* @author mrdonkey
*/
class RealSubject : Subject() {
override fun request() {
println("真实的请求")
}
}
Proxy
代理类,保有真实主体的引用
/**
* @create on 2020/7/5 22:49
* @description 代理
* @author mrdonkey
*/
class Proxy : Subject() {
lateinit var realSubject: RealSubject
override fun request() {
//实现代理的关键,它保存了真实的主体对象
if (!this::realSubject.isInitialized) {
realSubject = RealSubject()
}
realSubject.request()
}
}
Client
客户端
/**
* @create on 2020/7/5 22:52
* @description 客户端
* @author mrdonkey
*/
class Client {
companion object {
@JvmStatic
fun main(args: Array<String>) {
val proxy = Proxy()//新建一个代理
proxy.request()//调用其请求的方法
}
}
}
测试结果:
真实的请求
代理模式的应用
远程代理
:为一个对象在不同的地址空间提供局部代表。这样就可以隐藏一个对象存在于不同地址空间的事实。虚拟代理
:是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。例如,浏览器打开网页,有时文字显示出来,图片还需要一张张加载,那些未加载的图片就是通过虚拟代理来替代真实图片的,代理存储了真实图片路径与尺寸。安全代理
:用来控制真实对象访问时的权限。一般用于对象应该有不同访问权限的时候。智能指引
:指当调用真实对象时,代理处理另外一些事情。