代理模式笔记

什么是代理模式

为什么使用代理模式

代理模式笔记

静态代理

不使用代理时,直接调用对象的方法,使用代理后,通过代理调用对象的方法,同时可以在方法前后添加操作.
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);
    }

代理模式笔记

上一篇:activiti知识点梳理


下一篇:Hive基础(三十三):HIVE流程控制语句(一) IF