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的动态代理等等(关于这三先挖个坑,以后来填)。

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

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

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

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

  • 相关阅读:
    SharePoint 2013 配置基于表单的身份认证
    SharePoint 2013 场解决方案包含第三方程序集
    SharePoint 2010 站点附加数据升级到SP2013
    SharePoint 2013 在母版页中插入WebPart
    SharePoint 2013 搭建负载均衡(NLB)
    SharePoint 部署解决方案Feature ID冲突
    SharePoint 2013 配置基于AD的Form认证
    SharePoint Server 2016 Update
    SharePoint 2013 为用户组自定义EventReceiver
    SharePoint 2013 JavaScript API 记录
  • 原文地址:https://www.cnblogs.com/daily-note/p/7245213.html
Copyright © 2011-2022 走看看