杜撰23种设计模式--代理模式
静态代理:
静态代理模式,realSubject和Proxy 都要继承同一个接口。 可以通过实现同一个方法做到代理类代替被代理类的效果。
原方法有一个普通的sailBook方法。
在代理类中重写了sailBook并进行了方法的增强。在代理类中要留一个原有方法的引用,以此来运用被代理类的方法。
可以在生成代理类时,在构造器来生成被代理类的引用。
动态代理:
接口还是sailBook,原有普通方法也不变。
代理类进行了变化:
调用通过反射来调用:
首先要了解Proxy.newProxyInstance方法:
public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)
ClassLoader loader: 类加载器,代理类是在运行时动态生成的,所以需要一个类加载器来加载,可以使用目标类的加载器。 所以targer.getClass().getClassLoader()
Class<?>[] Interface : 接口数组,指定了代理类要实现的接口列表。
InvocationHandler : 实现了InvocationHandler接口的代理类,代理对象被调用的时候会触发Invoke方法。
了解完这个方法也就应该清楚动态代理应该怎么写了. 首先需要有一个被代理类的引用(可以在构造器进行实例化),然后就是代理增强的具体方法invoke.在Proxy.newInstance后执行。
静态代理和动态代理的区别就在于传入的对象是否是动态的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
2022-10-22 近期计划