一些个人对动态代理的理解★★★
一些个人对动态代理的理解
-
首先,代理就是在实现真实对象所有方法的基础之上再实现一些其他方法
比如说:真实对象房东的方法是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();
-
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)