#Java#动态代理,大概是Java里最难弄懂的知识点了吧


#Java#动态代理,大概是Java里最难弄懂的知识点了吧
文章图片
#Java#动态代理,大概是Java里最难弄懂的知识点了吧
文章图片
#Java#动态代理,大概是Java里最难弄懂的知识点了吧
文章图片
#Java#动态代理,大概是Java里最难弄懂的知识点了吧
文章图片
#Java#动态代理,大概是Java里最难弄懂的知识点了吧
今天是刘小爱自学Java的第54天 。
感谢你的观看 , 谢谢你 。
话不多说 , 开始今天的学习:
终于还是要学动态代理了 , 不管多难最终还是得搞定它 。
在学它之前 , 先学习一种设计模式 。
一、装饰设计模式举一个现实里明星和经纪人的例子:
现有一个明星 , emm , 就叫洛天依吧 。
明星是一种身份 , 很多人都可以是明星 , 在Java里面可以将其定义成一个接口 。
洛天依具体是指某个人 , 在Java里面可以将其定义成一个类 , 同时她的身份就是明星 , 那么实现明星接口就好了 。
1LuoTianYi类
①创建star接口
这是一个明星接口 , 有三个抽象方法:
唱歌sing(int money)方法 , money就是出场费;
跳舞dance(int money)方法 , 也需要对应的出场费;
休息Sleep()方法 。
不同的明星会有不同的歌和舞 , 所以使用抽象方法表示 。
②创建LuoTianYi类
她是一个明星 , 所以需要实现star接口 , 并重写其中的方法 , 说明自己会唱什么歌 , 会跳什么舞 。
好 , 现在问题来了 , 有人要请洛天依唱歌跳舞 。
我们都知道明星一般都会有自己的经纪人 , 一般都是由经纪人出面谈合作 。
噔噔蹬蹬 , 刘小爱闪亮登场了 , 刘小爱是谁?
他是LuoTianYi的经纪人 。
2刘小爱类
①创建刘小爱类
类中有一个成员变量Star , 构造方法参数为star 。
这是什么意思呢?
刘小爱同时是很多明星的经纪人 , 所以他的参数为star接口 , 创建该类对象的时候 , 需要传入star接口的实现类 。
找那个明星合作 , 创建刘小爱对象时说明就好了 , 这是面向接口编程的核心思想 。

②重写Sing()方法
现在有人要谈唱歌合作 , 那由刘小爱去谈价格 , 价格不够那不行 , 价格够了就让对应的明星出场唱歌 。
③重写Dance()方法
同样的道理 , 也是价格谈判 , 出场费都是1万 。
④重写sleep()方法
休息时间 , 不谈合作 。
3测试类最后一切都设置好了 , 做一个测试:
①创建刘小爱对象
同时说明此时要找哪位明星谈合作 , 哦 , 是LuoTianYi 。
②说明合作价格
唱歌一万五 , 跳舞五千 。
③控制台输出
唱歌钱够了 , 所以LuoTianYi开始唱歌了;
跳舞钱不够 , 所以没有跳舞 。
刘小爱这个类就是LuoTianYi这个类的代理 。
调用者找洛天依合作 , 其实是在和刘小爱在谈 , 在调用者的眼里 , 刘小爱就是LuoTianYi 。
【#Java#动态代理,大概是Java里最难弄懂的知识点了吧】现在合作谈拢了 , 由谁去执行?由LuoTianYi去执行 。
在IO流中 , 也有和其相似的情况:
我们使用的是缓冲字符流 , 但是缓冲流的底层是由字符流来执行的 , 那么缓冲字符流就是字符流的代理 。