一些个人对动态代理的理解★★★

一些个人对动态代理的理解

  • 首先,代理就是在实现真实对象所有方法的基础之上再实现一些其他方法

    比如说:真实对象房东的方法是rent,那么代理对象首先也要调用房东的rent方法

    其次,代理对象要实现一些其他的需求,像是收房租,收提成,带客户看房子等等

    可以这样认为:代理模式就是对原有代码的方法补充

    比如说现在有一个游戏,它的很多代码是固定的,如果我想要出一些活动,就用代理模式!

  • 其次,分析一下代理角色的处理程序类 ProxyInvocationHandler.java

    这个类其实就相当于是现实中的中介

    • 那么它的职责就显而易见了:调用真实对象的方法(rent)并实现其他方法(收费,带客户看房子等等)的补充,如下图所示

    • 由于客户需要访问到中介也就是代理对象,所以我们还要在代理程序中写一个获得代理对象的方法

      如下图所示

  • 最后来看一下客户端做了什么

    • 首先是联系代理角色,现在没有;用代理角色的处理程序来实现Host接口的调用

      //代理角色,现在没有;用代理角色的处理程序来实现Host接口的调用
      ProxyInvocationHandler pih = new ProxyInvocationHandler();
      
    • 设置代理类的代理对象,也就是代理了谁(因为一个中介可能是多个房东的代理人)

      //真实角色
      HostMaster hostMaster = new HostMaster();
      
      //pih -> HostMaster接口类 -> Host接口
      pih.setHost(hostMaster);
      
    • 获取newProxyInstance动态生成代理类并调用代理类的方法

      //获取newProxyInstance动态生成代理类
      Host proxy = (Host) pih.getProxy();
      proxy.rent();
      proxy.seeHouse();
      proxy.fee();
      
posted @ 2022-06-14 17:17  无关风月7707  阅读(30)  评论(0编辑  收藏  举报