首页 > 其他 > 详细

代理模式笔记

时间:2020-01-31 21:14:48      阅读:59      评论:0      收藏:0      [点我收藏+]

什么是代理模式

为什么使用代理模式

技术分享图片

静态代理

不使用代理时,直接调用对象的方法,使用代理后,通过代理调用对象的方法,同时可以在方法前后添加操作.
interface IAct{
    void act(int money);
}
class Actor implements IAct{
    public void act(int money) {
        System.out.println("收到"+money+"元,开始表演");
    }
}
class ProxyActor implements IAct{
    IAct actor;
    ProxyActor(IAct actor){
        this.actor=actor;
    }
    @Override
    public void act(int money) {
        // TODO Auto-generated method stub
        System.out.println("代理前的工作");
        actor.act(money);
        System.out.println("代理后的工作");
    }
    
}
public class ProxyPattern {
    public static void main(String[] args) {
        //不使用代理
        IAct ac=new Actor();
        ac.act(100);
        //使用代理后
        IAct proxy=new ProxyActor(ac);
        proxy.act(100);
    }
}

技术分享图片

动态代理

在运行时为对象创建代理类.
public static void main(String[] args) {
        
        //动态代理
        IAct proxyActor=(IAct)Proxy.newProxyInstance(ac.getClass().getClassLoader(),
                                                         ac.getClass().getInterfaces(),
                                                         new InvocationHandler() {

                                                            @Override
                                                            public Object invoke(Object proxy, Method method,
                                                                    Object[] args) throws Throwable {
                                                                int money=(int)args[0];
                                                                System.out.println("代理前的工作");                                                               
                                                                method.invoke(ac,money/2 );    //第一个参数是方法对象, 后面的是方法形参
                                                                System.out.println("代理后的工作");
                                                                return null;
                                                            }
            
        });
        proxyActor.act(100);
    }

技术分享图片

代理模式笔记

原文:https://www.cnblogs.com/l1057618497/p/12246634.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!