代理的意思(设计模式之)

 2025-08-12 00:06:01  阅读 882  评论 0

摘要:代理模式的含义代理模式的含义是:不直接地去执行一些业务逻辑,而是由该类的代理类去执行相应的其他业务,如AOP,除了主线的业务逻辑,相对应的日志输出,通过代理的方式去执行,输出,实现剥离非业务的部分,使得逻辑更加的情形。通俗的举例,就是老妈让你去打酱油,她自己

代理模式的含义

代理模式的含义是:不直接地去执行一些业务逻辑,而是由该类的代理类去执行相应的其他业务,如AOP,除了主线的业务逻辑,相对应的日志输出,通过代理的方式去执行,输出,实现剥离非业务的部分,使得逻辑更加的情形。

通俗的举例,就是老妈让你去打酱油,她自己不去打,而是让你代替她去打酱油,但是最终的酱油是相当于到了老妈的手中,和老妈亲自去买了一瓶酱油的结果是一样的。

动态代理

设计模式之 代理模式

上面的架构中,代理的部分负责通知的功能,而subject,负责执行主线的业务逻辑,两者之间没有必然的耦合关系,通知的advice从另一个切面切入,最终在client 进行耦合,这样就可以实现advice的部分和主线的subject 部分互不干扰

代理类

public class DynamicProxy {
    public static  T newProxyInstance(ClassLoader loader,
                                         Class[] interfaces,
                                         InvocationHandler handler) {
        if (true) {
            (new BeforeAdvice()).exec();
        }
        return (T) Proxy.newProxyInstance(loader, interfaces, handler);
    }
}

通知接口

public interface IAdvice {
    public void exec();
}

实现类

public class BeforeAdvice implements IAdvice {
    @Override
    public void exec() {
        System.out.println("action before advice!!!");
    }
}

业务逻辑

public interface Subject {
    public void doSomething(String str);
}

实现类

public interface Subject {
    public void doSomething(String str);
}

代理

public class MyInvocationHandler implements InvocationHandler {

    private final Object target;

    public MyInvocationHandler(Object target) {
        this.target = target;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        return method.invoke(this.target,args);
    }
}

执行

public class Client {
    public static void main(String[] args) {
        Subject subject = new RealSubject();
        InvocationHandler handler = new MyInvocationHandler(subject);

        ClassLoader classLoader = subject.getClass().getClassLoader();
        Class[] interfaces = subject.getClass().getInterfaces();

        //主题的代理
        Subject proxy = DynamicProxy.newProxyInstance(
                classLoader,
                interfaces,
                handler
        );
        proxy.doSomething("done.....");
    }
}

最终的效果

设计模式之 代理模式

分析:

从最后的client 进行分析,要使用代理,注意 c.getInterfaces()这句话,这是非常有意思的一句话,是说查找到该类的所有接口,然后实现接口的所有方法。当然了,方法都是空的,由谁具体负责接管呢?是new MyInvocationHandler(_Obj)这个对象。于是我们知道一个类的动态代理类是这样的一个类, 由InvocationHandler的实现类实现所有的方法,由其invoke方法接管所有方法的实现。

设计模式之 代理模式

版权声明:我们致力于保护作者版权,注重分享,被刊用文章【代理的意思(设计模式之)】因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!;

原文链接:https://www.yxiso.com/zhishi/2070534.html

标签:代理的意思

发表评论:

关于我们
院校搜的目标不仅是为用户提供数据和信息,更是成为每一位学子梦想实现的桥梁。我们相信,通过准确的信息与专业的指导,每一位学子都能找到属于自己的教育之路,迈向成功的未来。助力每一个梦想,实现更美好的未来!
联系方式
电话:
地址:广东省中山市
Email:beimuxi@protonmail.com

Copyright © 2022 院校搜 Inc. 保留所有权利。 Powered by BEIMUCMS 3.0.3

页面耗时0.0348秒, 内存占用1.91 MB, 访问数据库24次

陕ICP备14005772号-15