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();
    
        }
  • 相关阅读:
    互联网与局域网(四)
    Socket介绍(五)
    HttpClient(七)
    TCP协议与HTTP协议区别
    TCP连接的三次握手
    context-param和init-param区别
    【HPU】[1736]老王修马路(二)
    【HPU】[1735]老王修马路(一)
    【HPU】[1734]老王修公园
    【HPU】[1733]神奇的数字9
  • 原文地址:https://www.cnblogs.com/Rnan/p/10675591.html
Copyright © 2011-2022 走看看