zoukankan      html  css  js  c++  java
  • 简单纪要:代理模式

    代理模式理解:

    使用一个代理将对象包装起来, 然后用该代理对象取代原始对象. 任何对原始对象的调用都要通过代理. 代理对象决定是否以及何时将方法调用转到原始对象上。

    代理模式 :静态代理  显式的指明了代理类和被代理类

    1:创建提供代理的服务类接口

    //方便真实对象实现 并重写,书写真实访问信息
    interface
    NetWork { public void browse(); }

    2:创建被代理类

    //被代理类 实现服务接口
    class
    RealServer implements NetWork { @Override public void browse() { System.out.println("真实服务器联网浏览网页"); } }

    3:创建代理类 

    //代理类声明 服务接口类的属性 ,并重写服务接口的方法,添加被代理类实现不了的操作
    class
    ProxyServer implements NetWork { private NetWork work; public ProxyServer(NetWork work) { this.work = work; } public void check() { System.out.println("检查网络连接是否通畅"); }
    @Override
    public void browse() { check(); System.out.println("代理服务器代理真实服务器操作:"); work.browse(); } }

    4:测试单元

     public static void main(String[] args) {
         //创建被代理对象
            NetWork work = new RealServer();
         //实现代理
            ProxyServer proxy = new ProxyServer(work);
         //调用被代理方法
            proxy.browse();
    
        }

     静态代理的缺点:

    ①代理类和目标对象的类都是在编译期间确定下来,不利于程序的扩展。

    ②同时,每一个代理类只能为一个接口服务,这样一来程序开发中必然产生过多的代理。

    代理模式 :动态代理  动态代理是指客户通过代理类来调用其它对象的方法,并且是在程序运行时根据需要动态创建目标类的代理对象

    1:创建提供代理的服务类接口

    //方便真实对象实现 并重写,书写真实访问信息
    interface NetWork { public void browse(); }

    2:创建被代理类

    //被代理类 实现服务接口
    class RealServer implements NetWork {
        @Override
        public void browse() {
            System.out.println("真实服务器联网浏览网页");
        }
    }

    3:创建代理类

     class DynamicProxyHandler implements InvocationHandler {
    
        private Object object;
    
        public DynamicProxyHandler(final Object object) {
            this.object = object;
        }
    
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            System.out.println("代理浏览网页准备");
            Object result = method.invoke(object, args);
            System.out.println("代理浏览网页后");
            return result;
        }
    }

    3:创建测试类

     public static void main(String[] args) {
    
            NetWork work = new RealServer();
    
            NetWork proxyServer = (NetWork)Proxy.newProxyInstance(NetWork.class.getClassLoader(),new Class[]{NetWork.class},new DynamicProxyHandler(work));
    
            proxyServer.browse();
    
        }
  • 相关阅读:
    37. Sudoku Solver(js)
    36. Valid Sudoku(js)
    35. Search Insert Position(js)
    34. Find First and Last Position of Element in Sorted Array(js)
    33. Search in Rotated Sorted Array(js)
    32. Longest Valid Parentheses(js)
    函数的柯里化
    俞敏洪:我和马云就差了8个字
    vue路由传值params和query的区别
    简述vuex的数据传递流程
  • 原文地址:https://www.cnblogs.com/Rnan/p/10675591.html
Copyright © 2011-2022 走看看