其他分享
首页 > 其他分享> > 反射与代理设计模式那点事儿

反射与代理设计模式那点事儿

作者:互联网

反射与代理设计模式

静态代理设计模式

package 阿里云大学java.java高级学习.反射练习;

class MessageReal implements IMessage{
    @Override
    public void send() {
        System.out.println("【发送消息】阿鸡是笨蛋");
    }
}

class MessageProxy implements IMessage {
    private IMessage message;   //代理对象,一定是业务接口实例;
    public MessageProxy(MessageReal message){
        this.message = message;
    }
    public boolean connect(){
        System.out.println("【消息代理】进行消息发送通道的链接");
        return true;
    }
    public void close(){
        System.out.println("【消息代理】关闭消息通道");
    }
    @Override
    public void send() {
        if(this.connect()){
            this.message.send();
            this.close();
        }
    }
}

public class 反射与代理设计模式 {
    public static void main(String[] args) {
        IMessage message = new MessageProxy(new MessageReal());
        message.send();
    }
}

动态代理设计模式

在这里插入图片描述

package 阿里云大学java.java高级学习.反射练习;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

// 动态代理
class DTProxy 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("【消息代理】关闭消息通道");
    }

    @Override
    public Object invoke(Object proxy, 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;
    }
}

class MessageReal implements IMessage{
    @Override
    public void send() {
        System.out.println("【发送消息】阿鸡是傻逼");
    }
}

class MessageProxy implements IMessage {
    private IMessage message;   //代理对象,一定是业务接口实例;
    public MessageProxy(MessageReal message){
        this.message = message;
    }
    public boolean connect(){
        System.out.println("【消息代理】进行消息发送通道的链接");
        return true;
    }
    public void close(){
        System.out.println("【消息代理】关闭消息通道");
    }
    @Override
    public void send() {
        if(this.connect()){
            this.message.send();
            this.close();
        }
    }
}

public class 反射与代理设计模式 {
    public static void main(String[] args) {
        //IMessage message = new MessageProxy(new MessageReal());
        IMessage message = (IMessage) new DTProxy().bind(new MessageReal());
        message.send();
    }
}

CGLIB实现代理设计模式

标签:反射,void,代理,IMessage,那点,message,设计模式,public
来源: https://blog.csdn.net/qq_43514659/article/details/114639542