zoukankan      html  css  js  c++  java
  • 设计模式(十二)---代理模式

    1、简介

      代理模式是对象的结构模式,代理模式给某个对象提供一个代理对象,并由代理对象控制对原对象的引用。

    2、代理模式的分类

      2.1、按照目的分类:远程代理,虚拟代理,Copy-on-Write代理,保护代理,Cache代理,防火墙代理,同步化代理,智能引用代理。

      2.2、按照实现方式分类:动态代理和静态代理,其中,动态代理又分为jdk代理和cglib代理,这篇文章,只讨论静态代理,说明代理模式,动态代理以后再专门讨论

    3、静态代理涉及到的角色

      3.1、抽象接口(Subject) : 需要被委托类和代理类实现。

      3.2、委托类(RealSubject):被代理的类,需要实现抽象接口。

      3.3、代理类(Proxy)   :需要实现抽象接口。

    4、源代码

      4.1、抽象代理接口

    package Proxy.StaticProxy;
    /**
     * ********************************************************  
    * @ClassName: Subject 
    * @Description: 静态代理  抽象代理接口 需要被委托类和代理类实现
    *  
    **********************************************************
     */
    public interface Subject {
        void request();
    }

      4.2、委托类

    package Proxy.StaticProxy;
    /**
     * ********************************************************  
    * @ClassName: RealSubject 
    * @Description: 委托类角色 
    *  
    **********************************************************
     */
    public class RealSubject implements Subject{
    
        @Override
        public void request() {
            System.out.println("RealSubject");
        }
    
    }

      4.3、代理类

    package Proxy.StaticProxy;
    /**
     * ********************************************************  
    * @ClassName: StaticProxy 
    * @Description: 代理类角色 
    *  
    **********************************************************
     */
    public class StaticProxy  implements Subject{
        private Subject subject;
        
        public StaticProxy(Subject subject) {
            this.subject = subject;
        }
        @Override
        public void request() {
            System.out.println("Begin");
            subject.request();
            System.out.println("End");
            
        }
        
    }

      4.4、测试客户端

    package Proxy.StaticProxy;
    /**
     * ********************************************************  
    * @ClassName: StaticProxyTest 
    * @Description: 静态代理测试客户端
    *  
    **********************************************************
     */
    public class StaticProxyTest {
    
        public static void main(String[] args) {
            
            Subject subject = new StaticProxy(new RealSubject());
            subject.request();
            
        }
    
    }

    5、测试,运行结果如下

    6、总结

      一个委托类必须对应一个代理类,大量使用会照成代码臃肿。

  • 相关阅读:
    Django Ajax知识
    Django走过的坑
    Django-8 聚合查询与分组查询
    Django-7 ORM多表操作
    Django-6 Django ORM层
    Django-5 模板层
    docker 常用批量操作
    K8S 从私有仓库拉取镜像
    linux制作iso文件
    二进制安装docker
  • 原文地址:https://www.cnblogs.com/shun-gege/p/7508705.html
Copyright © 2011-2022 走看看