杜撰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后执行。

 

静态代理和动态代理的区别就在于传入的对象是否是动态的

posted @   NobodyHero  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
历史上的今天:
2022-10-22 近期计划
点击右上角即可分享
微信分享提示