7.代理模式(大话设计模式kotlin版)

代理模式

定义

代理模式(Proxy),为其他对象提供一种代理以控制这个对象的访问。代理就是真实对象的代表。

UML结构图

代理模式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()//调用其请求的方法
        }
    }
}

测试结果:

真实的请求
代理模式的应用
  • 远程代理 :为一个对象在不同的地址空间提供局部代表。这样就可以隐藏一个对象存在于不同地址空间的事实。
  • 虚拟代理 :是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。例如,浏览器打开网页,有时文字显示出来,图片还需要一张张加载,那些未加载的图片就是通过虚拟代理来替代真实图片的,代理存储了真实图片路径与尺寸。
  • 安全代理 :用来控制真实对象访问时的权限。一般用于对象应该有不同访问权限的时候。
  • 智能指引 :指当调用真实对象时,代理处理另外一些事情。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值