A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

最近在论坛看见很多人问什么是代理,我就说说我对代理的理解吧。此贴不说代码,只说概念,以便给大家形象化的理解。

1.首先说下什么是代理。
举个例子:代理类和目标类的关系就像是经纪人与明星一样。用代理的原因就是让目标类可以更专注的完成自己的业务逻辑,而其他繁琐的逻辑由代理类完成,从而达到代码增强的功能。就像明星只需要专著自己的演绎事业,而像面对记者琐碎的采访就交给经纪人好了,从而达到名利双收,相当于代码增强部分。
2.代理类 目标类 要实现相同接口。
首先无论是代理类还是目标类都要实现相同的接口,目的是要达成共同的协议,如果两个类不实现同一个接口不干同一件事,也就没有代理的意义了,这也就是为什么代理可以让目标类在不改动源码的情况下实现代码增强。
3.代理内部是如何实现的。
说说静态代理吧,这样相对容易些。其实在静态代理中,代理类的内部要有目标类的真实对象,由于实现相同的接口,代理类和目标类对外访问的方法完全相同。比如:当我们访问代理类method1方法的时候,实际代上理类method1方法访问的是目标类的method1方法,当拿到目标类的返回结果时,代理类的method1方法可以对这个结果做进一步的加工。举个现实的例子:就像记者想知道明星早餐吃什么。这个问题首先会问经纪人,接着经纪人就会问明星,明星的回答是豆浆,油条。但是经纪人觉得这个答案太掉价可能会对明星产生负面影响,然后经纪人告诉记者:“明星每天早上吃牛奶面包”(对真实结果的包装,也就是代码增强)。

相信大家这回应该明白多了。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马