zoukankan      html  css  js  c++  java
  • 动态代理

    //动态代理
    public class ProxyTest2 {
        public static void main(String[] args) {
            SuperMan superMan = new SuperMan();
            Human proxyInstance = (Human) ProxyFactory.getProxyInstance(superMan);
            System.out.println(proxyInstance.dream());
            proxyInstance.est("菠萝");
        }
    }
    
    //接口
    interface Human{
        String dream();
        void est(String food);
    }
    
    //被代理类
    class SuperMan implements Human{
        @Override
        public String dream() {
            return "my dream is fly";
        }
        @Override
        public void est(String food) {
            System.out.println("I like to eat "+food);
        }
    }
    
    //代理类工厂
    class ProxyFactory {
        public static Object getProxyInstance(Object object) { //obj : 被代理类的对象
         //通过Proxy 创建一个代理类
            /*
            三个参数:
             loader :被代理类的加载器
             interface : 代理类实现的接口
              invocationHandler : 动态的调用被代理类的方法
             */
            MyInvocationHandler myInvocationHandler = new MyInvocationHandler();
            myInvocationHandler.bind(object);
           return Proxy.newProxyInstance(object.getClass().getClassLoader(),object.getClass().getInterfaces(),myInvocationHandler);
        }
    }
    //invocationHandler的实现类
    class MyInvocationHandler implements InvocationHandler{
        private Object object; //需要使用被代理类的对象赋值
        public void bind(Object object){
            this.object=object;
        }
        //当通过代理类调用方法时 , 就会通过invoke()方法调用被代理类的方法
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            return method.invoke(object,args);
        }
    }
  • 相关阅读:
    [leetCode]100.相同的树
    [leetCode]88.合并两个有序数组
    [leetCode]83.删除排序链表中的重复元素
    排序算法总结
    [leetCode]69. x 的平方根
    POJ 1151 Atlantis
    POJ 3468 A Simple Problem with Integers
    SGU 271 Book Pile
    POJ 2970 The lazy programmer
    FZU 2254 英语考试
  • 原文地址:https://www.cnblogs.com/Anonymity-zhang/p/14487348.html
Copyright © 2011-2022 走看看