[java] view plain copy
house = new House(" Abbey", 5000);
house.();//这里只是通过创建出代理
Log.i(TAG, " for ahouse");
house.();
Log.i(TAG, "");
house.();
house.();
4.动态代理
上面介绍的都是自己先写好的代理类,这样代理关系都是固定的,当代理多个真实对象的时候就要写多个代理类,并且会产生冗余的代码,扩展性和可维护性都不高,而动态代理是基于反射实现了在程序运行的过程中才决定代理什么对象.像AOP的核心思想就是动态代理.(这里使用的是Java的动态代理)
既然是动态代理就不需要也不需要实现接口了,这里写一个实现的接口,并且提供一个根据Proxy构建出来的代理实例给.在通过反射调用真实对象具体的方法之前打印出该方法的名字.
[java] view plain copy
class{
finalTAG = .class.();
;
( ){
this. = ;
Proxy.(.().(),
.().(), this);
@
( proxy,, [] args){
ret;
Log.i(TAG, " name:" + .());
ret = .(, args);
ret;
[java] view plain copy
proxy = new ();
house = () proxy.(new House(" Abbey", 5000));
Log.i(TAG, " for ahouse");
house.();
Log.i(TAG, "");
house.();
house.();
Log.i(TAG, "so easy");
从结果可以看出在真正真实对象的方法之前都会打印出方法名,也可以在这里做一些其他的对象控制.
文章插图
这个时候整个过程的时序图就变成下面的样子了,通过JDK的Proxy对象和反射的机制来支撑起来动态代理的核心功能.
文章插图
三.总结
【android 代理模式】代理模式的使用场景还是挺多的,可以降低对象的复杂度,对项目进行解耦(特别是动态代理的AOP)等,学习设计模式其实最适合的方法就是拿来用,在适用于该模式的场景下灵活得去运用它才算是真正的掌握一种模式.
- 设计模式-代理模式之动态代理
- Android 蓝牙 PBAP obex协议详解 - 史上最全
- android仿ios弹框 带动画效果
- 飞行模式微信语音对方会怎么提示
- oppo怎么取消盲人模式
- Windows 7的“上帝模式”详细解析
- 贵港亚马逊云代理商:全球经济形势复杂严峻,云服务的未来形势还会逆势生长吗?
- 开源版小剧场短剧影视小程序源码+支付收益等模式+付费短剧小程序源码+完整源码包和
- 360 kill android,过核晶模式KILL360全套程序
- 安卓7.0 史上最快 Android N运行效率暴增至600%