• 动态代理设计模式


    静态代理设计模式由于采用硬编码的形式,代理类不具备通用性,这样就会造成大量的重复代码,为了得到统一的代理支持可以基于动态代理设计模式完成。
    代码实现如下:

    package com.uk.demo;
    
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Proxy;
    import java.lang.reflect.Method;
    
    interface IMessage{
        public void send();
    }
    
    class MessageReal implements IMessage{
        @Override
        public void send() {
            System.out.println("【消息发送】www.dynamicproxy.com");
        }
    }
    
    class DynProxy implements InvocationHandler{
        private Object target;
        /**
         * 进行真实业务对象与代理业务对象之间的绑定处理
         * @param target 真实业务对象
         * @return Proxy生成的代理业务对象
         */
        public Object bind(Object target) {
            this.target = target;
            //依据真实对象的类加载器、实现接口以及代理调用类(InvocationHandler子类)动态创建代理对象
            return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
        }
        public boolean connect() {
            System.out.println("【消息代理】进行消息发送通道的连接。");
            return true;
        }
        public void close() {//代理方法
            System.out.println("【消息代理】关闭消息通道。");
        }
        public Object invoke(Object pro, Method method, Object[] args) throws Throwable{
            Object retData = null;                            //真实业务处理结果
            if(this.connect()) {                            //通道是否连接
                retData = method.invoke(this.target, args); //调用真实业务
                this.close();                                //通道关闭
            }
            return retData;                                    //返回执行结果
        }
    }
    
    public class DynamicProxy {
        public static void main(String[] args) {
            IMessage msg = (IMessage) new DynProxy().bind(new MessageReal());
            msg.send();
        }
    }

    运行结果:

    【消息代理】进行消息发送通道的连接。
    【消息发送】www.dynamicproxy.com
    【消息代理】关闭消息通道。
  • 相关阅读:
    css3中的位置移动
    css中伪元素选择器
    css中伪类选择器
    html5之属性选择器
    html5的文本属性
    html5的视频和音频使用
    常用的linux命令
    常见的http状态码
    springboot之安装和启动es
    linux版本的jdk安装
  • 原文地址:https://www.cnblogs.com/sunzhongyu008/p/11223967.html
Copyright © 2020-2023  润新知