zoukankan      html  css  js  c++  java
  • 设计模式之代理模式

    定义(百度百科):
          为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

    UML类图:

    具体代码:

    public class Client {
        public static void main(String[] args) {
            Subject realSubject = new RealSubject();
            Proxy proxy = new Proxy(realSubject);
            proxy.request();
        }
    }
    
    public class Proxy {
        Subject realSubject = null;
        Proxy(Subject realSubject) {
            this.realSubject = realSubject;
        }
    
        void request() {
            System.out.println("代理类");
            realSubject.request();
        }
    }
    
    public class RealSubject implements Subject {
    
        @Override
        public void request() {
            System.out.println("request");
        }
    }
    
    public interface Subject {
        void request();
    }

    模块说明:
    Subject抽象主题:声明真实主题和代理主题的共同接口。
    RealSubject真实主题:定义代理对象需要代理的真实对象。
    Proxy代理主题:代替真实对象来控制对真实对象的访问,代理对象持有真实对象的应用,从而可以随时控制客户端对真实对象的访问。

    相关实例:
    代理模式大家都是程序员都懂的翻墙,就是挂的代理服务器。
    具体到代码层面,spring的动态代理,java原生的动态代理,cglib的动态代理等等(关于这三先挖个坑,以后来填)。

    适用场景:
    它为对象的间接访问提供了一个解决方案,可以对对象的访问进行控制。

    优缺点:
    优点:
    能够协调调用者和被调用者,在一定程度上降低了系统的耦合度。
    客户端可以针对抽象主题角色进行编程,增加和更换代理类无须修改源代码,符合开闭原则,系统具有较好的灵活性和可扩展性。

    缺点:
    由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢,例如保护代理。
    实现代理模式需要额外的工作,而且有些代理模式的实现过程较为复杂,例如远程代理。

    总结:
    代理模式实质是控制对象的访问。

  • 相关阅读:
    设计模式开篇——7大设计原则
    MySQL MVCC专题
    Spring常考的面试题
    HashMap常考面试题
    Equals和==的比较
    高并发编程
    一文读懂JVM
    scala实现定时任务的方法
    PLAY2.6-SCALA(十二) 表单的处理
    PLAY2.6-SCALA(十一) 模板常用场景
  • 原文地址:https://www.cnblogs.com/daily-note/p/7245213.html
Copyright © 2011-2022 走看看