千家信息网

什么是静态代理设计模式

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇内容主要讲解"什么是静态代理设计模式",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"什么是静态代理设计模式"吧!静态代理设计模式代理设计模式是在程序开发
千家信息网最后更新 2026年11月03日什么是静态代理设计模式

本篇内容主要讲解"什么是静态代理设计模式",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"什么是静态代理设计模式"吧!

静态代理设计模式

代理设计模式是在程序开发中使用最多的设计模式,代理设计模式的核心是有真实业务实现类和代理业务实现类,并且代理类要完成比真实业务更多的处理操作。

传统代理设计模式的弊端

所有的代理设计模式如果按照设计要求来说,必须是基于接口的设计,也就是说需要首先定义出核心接口的组成。
范例:模拟一个消息发送的代理操作结构(传统代理设计)

public class JavaAPIDemo {public static void main(String[] args)throws Exception{        IMessage message=new MessageProxy(new MessageReal());        message.send();    }}interface IMessage{   //传统代理设计必须有接口public void send();   //业务方法}class MessageReal implements IMessage {@Overridepublic void send() {        System.out.println("【发送消息】www.mldn.cn");    }}class MessageProxy implements IMessage {   //代理类private IMessage message;  //代理对象,一定是业务接口实例public MessageProxy(IMessage message){this.message=message;    }@Overridepublic void send() {if(this.connect()){this.message.send();  //消息的发送处理this.close();        }    }public boolean connect(){        System.out.println("【消息代理】进行消息发送通道的连接。");return true;    }public void close(){        System.out.println("【消息代理】关闭消息通道。");    }}

执行结果:

以上的操作代码是一个最为标准的代理设计,但是如果要进一步的去思考会发现客户端的接口与具体的子类产生了耦合问题,所以这样的操作如果从实际的开发来讲,最好再引入工厂设计模式进行代理对象的获取。

以上的代理设计模式为静态代理设计,这种静态代理涉及的特点在于:一个代理类只为一个接口服务,如果现在准备有3000个业务接口,则按照此种做法就意味着需要编写3000个代理类,并且这些代理类操作形式类似。

所以现在需要解决的问题在于:如何可以让一个代理类满足于所有的业务接口操作要求。

动态代理设计模式

通过静态代理设计模式的缺陷可以发现,最好的做法是为所有功能一致的业务操作接口提供有统一的代理处理操作,而这就可以通过动态代理机制来实现,但是在动态代理机制中需要考虑到如下几点问题:

  • 不管是动态代理类还是静态代理类都一定要接收真实业务实现子类对象;

  • 由于动态代理类不再与某一个具体的接口进行捆绑,所以应该可以动态获取类的接口信息。


动态代理设计模式

在进行动态代理实现的操作中,首先需要关注的就是一个InvocationHandler接口,这个接口规定了代理方法的执行。

public interface InvocationHandler{/**     * 代理方法调用,代理主体类中执行的方法最终都是此方法     * @param proxy 要代理的对象     * @param method 要执行的接口方法名称     * @param args 传递的参数     * @return 某一个方法的返回值     * @throws Throwable 方法调用时出现的错误继续向上抛出     */public Object invoke(Object proxy, Method method, Object[] args) throws Throwable;}

在进行动态代理设计时,对于动态对象的创建是由JVM底层完成的,此时主要依靠的是java.lang.reflect.Proxy程序类,而这个类中只提供了一个核心方法:
代理对象:public static Object newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler h)

  • ClassLoader loader:获取当前真实主体类的ClassLoader;

  • Class[] interfaces:代理是围绕接口进行的,所以一定要获取真实主体类的接口信息;

  • InvocationHandler h:代理处理的方法;

范例:实现动态代理机制

import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class JavaAPIDemo {public static void main(String[] args)throws Exception{        IMessage msg=(IMessage)new MLDNProxy().bind(new MessageReal());        msg.send();    }}class MLDNProxy implements InvocationHandler{private Object target;  //保存真实业务对象/**     * 进行真实业务对象与代理业务对象之间的绑定处理     * @param target 真实业务对象     * @return Proxy生成的代理业务对象     */public Object bind(Object target){this.target = target;return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(),this);    }public boolean connect(){        System.out.println("【消息代理】进行消息发送通道的连接。");return true;    }public void close(){        System.out.println("【消息代理】关闭消息通道。");    }@Overridepublic Object invoke(Object pro, Method method, Object[] args) throws Throwable {        System.out.println("*****【执行方法: 】"+method);        Object returnData = null;if(this.connect()){            returnData = method.invoke(this.target, args);this.close();        }return returnData;    }}interface IMessage{  //传统代理设计必须有接口void send();  //业务方法}class MessageReal implements IMessage {@Overridepublic void send() {        System.out.println("【发送消息】www.mldn.cn");    }}

执行结果:

如果认真观察系统中提供的Proxy.newProxyInstance()方法,会发现该方法会使用大量的底层机制来进行代理对象的动态创建,所有的代理类是符合所有相关功能需求的操作功能类,它不再代表具体的接口,这样在处理时就必须依赖于类加载器与接口进行代理对象的伪造。

到此,相信大家对"什么是静态代理设计模式"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

代理 设计 接口 业务 模式 设计模式 方法 对象 动态 消息 静态 处理 传统 机制 通道 主体 代理业务 功能 核心 问题 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网高科技 西安纸贵互联网科技有限公司 科技平台互联网 重庆互联网络科技 关于新基建和互联网科技 互联网金融科技创新 华中科技大学互联网 人人互联网科技是培训 卫星互联网科技股票 小米互联网科技园设置 阿里互联网科技公司 重庆互联网医院沙龙医盟信息科技 南通创西澳互联网科技有限公司 广东工业互联网大赛深圳学泰科技 张召忠谈中国互联网科技 互联网科技快讯热点 恒生科技指数 中概互联网 互联网科技对化妆品行业 宁波允成互联网科技有限公司 知域互联网科技有限公司官网 河南云网互联网络科技有限公司 人人互联网科技是培训 顺网科技2021年互联网排名 互联网科技公司的市场部门 互联网教育科技公司vipkid 成都铂石互联网科技做什么的 深圳育鹏互联网科技有限公司招聘 沐思想互联网科技有限公司 上海钢联属于互联网科技股吗 科技互联网公司两年变化
0