zoukankan      html  css  js  c++  java
  • Java Proxy 代理学习

    1.我说理解的代替

      

    用图说话 直接上代码

    public class Facade implements InvocationHandler{
    
        private Object obj = null;
        
        private static Facade facade = null;
        
        
        private static Facade getInstence(){
            if(facade == null){
                facade = new Facade();
            }
            return facade;
        } 
        
        public static Object get(Object obj){
            getInstence().obj  = obj;
            /**
             * 说明:这里可以看做返回一个代理对象 
             * 这个方法的作用:1.载入Interface的Class里面会自动在JVM里面找到这个Interface的实现
             *                   2.载入一个 InvocationHandler 这个Hander所做的事情就是在方法调用之前 之后干你想做的事
             *                   3.真正返回的是接口实现的对象
             */
            return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), getInstence());
        }
        
        /**
         * 重写代理调用
         */
        @Override
        public Object invoke(Object proxy, Method method, Object[] args)
                throws Throwable {
            System.out.println("Before Method Exec");
            Object result = method.invoke(obj, args);
            System.out.println("After Method Exec");
            return result;
        }
    
    }

    接口 必须实现

    /**
     * 
     * @author yunyang
     *
     */
    public interface IProxyInterface {
        
        public void add();
        
        public void delete();
    }

    接口实现

    public class ProxyImpl implements IProxyInterface {
    
        @Override
        public void add() {
            // TODO Auto-generated method stub
            System.out.println("Add Method Exec");
            
        }
    
        @Override
        public void delete() {
            // TODO Auto-generated method stub
            System.out.println("Delete Method Exec");
        }
    
    }

    测试代码

    public class Test {
        public static void main(String[] args) throws ClassNotFoundException,Exception {
            IProxyInterface impl = (IProxyInterface)Facade.get(new ProxyImpl());
            
            //这里看做是代理对象调用的方法 只是和原有对象方法一样那样就好理解了
            impl.add();
            impl.delete();
        }
    }

    这样的好处 把接口以及实现写到接口文件里面 那样可以降低耦合 facade 思想

  • 相关阅读:
    PyCharm常用快捷键
    在PyCharm中打开文件的位置
    使用Socket下载图片
    Python散列类型和运算符
    Python格式化输出和深浅复制
    爬虫的概念和会话
    Python数值类型和序列类型
    HTTP与HTTPS
    PyCharm彻底删除项目
    PyCharm永久激活
  • 原文地址:https://www.cnblogs.com/yy199110/p/3080246.html
Copyright © 2011-2022 走看看