当前位置: 七九推 > IT编程>软件设计>设计模式 > 结构型模式之代理模式

结构型模式之代理模式

2022年07月04日 设计模式 我要评论
代理模式(proxy pattern)也叫委托模式,是一个使用率非常高的模式。定义:为其他对象提供一种代理以控制对这个对象的访问。代理模式是一项基本的设计技巧,许多其他的模式,如状态模式、策略模式、访

 代理模式(proxy pattern)也叫委托模式,是一个使用率非常高的模式。

定义:

  • 为其他对象提供一种代理以控制对这个对象的访问。

代理模式是一项基本的设计技巧,许多其他的模式,如状态模式、策略模式、访问者模式本质上也采用了代理模式。类图如下所示。

代理模式提供以下3个角色。

  • 抽象主题(subject)角色:是真实主题和代理主题的共同接口,以便在任何可以使用真实主题的地方都可以使用代理主题。
  • 代理主题(proxy subject)角色:也叫委托类、代理类,该角色负责控制对真实主题的引用,负责在需要的时候创建或删除真实主题对象,并且在真实主题角色处理完毕前后做预处理和善后处理工作。
  • 真实主题(real subject)角色:该角色也叫做委托角色、被代理角色,是业务逻辑的具体执行者。

subject.java

public interface subject {
    // 定义一个请求方法
    public void request();
}

realsubject.java模式

public class realsubject implements subject {
    @override
    public void request() {
        // 业务逻辑处理
    }
}

proxysubject.java

public class proxysubject implements subject {
    private subject subject;
    public proxysubject(subject subject) {
        this.subject = subject;
    }
    @override
    public void request() {
        this.beforerequest();
        this.subject.request();
        this.afterrequest();
    }
    // 请求前的操作
    private void beforerequest() {
        // 预处理
    }
    // 请求后的操作
    private void afterrequest() {
        // 善后处理
    }
}

一个代理主题类可以代理多个真实主题,具体代理哪个真实主题是由高层的应用模块决定的,可以通过代理类的构造函数传递被代理者。

代理模式的各类

  • 远程(remote)代理:为一个位于不同地址空间的对象提供一个局部代表对象。这个不同的地址空间可以是在本机器中,也可以在另一台机器上。
  • 虚拟(virtual)代理:有时需要创建一些消耗较多资源的对象,可以首先创建代理对象,而将真实对象的创建延迟。例如,加载一个很大的图片,可以通过图片的代理来替代真正的图片。
  • 保护(protect or access)代理:控制一个对象的访问,如果需要,可以给不同的用户提供不同级别的使用权限。
  • 缓存(cache)代理:为某一个目标操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果。
  • 同步(synchronization)代理:使几个用户能够同时使用一个对象而没有冲突。
  • 智能引用(smart reference)代理:当一个对象被引用时,提供一些额外的操作,例如,记录访问的流量和次数等。

注意:在所有各类的代理模式中,虚拟代理、远程代理、智能引用代理和保护代理是最为常见的代理模式。

优点:

  • 职责清晰:真实的角色实现实际的业务逻辑,不用关心其他非本职的事务,通过附加的代理完成附加的事务,附加的结果就是编程简洁清晰。
  • 高扩展性:具体主题角色随需求不同可能有很多种,但只要实现了接口,代理类就完全可以在不做任何修改的情况下代理各种真实主题角色。
  • 智能化:代理类可以在运行时才确定要去代理的真实主题,这是一个强大的功能。

应用场景:

  • 代理模式应用非常广泛,大到一个系统框架、企业平台,小到事务处理、代码片段,随处可见代理模式的使用,例如,java rmi的远程调用就是一种代理模式的应用,现在流行的aop也可以通过代理模式实现。

摘自:

青岛东合信息技术有限公司 . 设计模式(java版) .  电子工业出版社,2012,73-76.

 

(0)
打赏 微信扫一扫 微信扫一扫

相关文章:

  • 设计模式漫谈之状态模式

    设计模式漫谈之状态模式

    最近感悟挺多,看了很多源码,发现很多东西自己都不懂,程序员这条路真是慢慢其修远兮啊,我爱写一些感悟。在公司上班最重要的就是工作态度,(就是职业道德,工匠精神),... [阅读全文]
  • 安全SECUERITY单词SECUERITY证券

    安全SECUERITY单词SECUERITY证券

    中文名:证券业 外文名:secuerity 含义:指从事证券发行和交易服务 性质:证券市场的基本组成要素 组成:证券交易所、证券公司 目录1 证券评级 2 证券... [阅读全文]
  • 设计模式之享元模式(Flyweight)

    设计模式之享元模式(Flyweight)

    享元模式顾名思义就是羽量级模式或者蝇级模式,形容体量小的应用,该模式主要的设计目的是为了迎合系统大量相似数据的应用而生,减少用于创建和操作相似的细碎对象所花费的... [阅读全文]
  • 《Head First设计模式》批注系列(一)——观察者设计模式

    《Head First设计模式》批注系列(一)——观察者设计模式

    最近在读《Head First设计模式》一书,此系列会引用源书内容,但文章内容会更加直接,以及加入一些自己的理解。  观察者模式(有时又被称为模型-视图(Vie... [阅读全文]
  • 单例设计模式总结

    单例设计模式总结

    最近看到一篇关于单例模式较为详细的讲解的文章:下面对此文章进行摘录 (java)// version 1.0 最为朴素的单例模式实践;public class ... [阅读全文]
  • 设计模式的定义和分类

    设计模式的定义和分类

    1、设计模式的定义和分类设计迷失的出现可以让开发人员站在前人的肩膀上,通过一些成熟的设计方案来指导新项目的设计和开发没以便于开发出具有更好的灵活性和可拓展性。也... [阅读全文]

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2023  七九推 保留所有权利. 粤ICP备17035492号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com