美文网首页
2018-03-06

2018-03-06

作者: 叶子酱hi | 来源:发表于2018-03-06 11:36 被阅读0次

代理模式

代理模式是常用的结构型设计模式之一,当无法直接访问某个对象或者访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,所访问的真实对象与代理对象需要实现相同的接口。根据代理模式使用目的不同,代理模式可以分为多种类型,如:保护代理、远程代理,虚拟代理,缓冲代理等。

代理模式概述

代理模式: 给某一个对象提供一个代理或占位符,并有代理对象来控制原对象的访问。Proxy Pattern Provide a surrogate or placeholder for another object to control

代理模式结构与实现

代理模式的结构比较简单,其核心是代理类,为了让客户端能够一致性的对待真实对象和代理对象。结构如下:、
[图片上传失败...(image-132066-1520307438615)]
如图,代理模式包含三个角色:

  • Subject(抽象主题角色):它声明了真实主题和抽象主题的共同接口,这样一来在任何使用真实主题的地方都可以使用代理主题,客户端通常要针对抽象主题角色进行编程。

  • Proxy(代理主题角色):它包含了一个真实主题的引用,并提供一个和真实主题相同的接口,控制对真实主题角色的使用。

  • RealSubject(真实主题角色):定义了代理角色所代理的真实对象,里有真实的业务操作。
    如图的代理模式结构图实现很简单。在实际开发中,代理类的实现比上述代码复杂很多,常用的代理模式如下:

  • 远程代理(remote proxy):为一个位于不同的地址空间的对象提供一个本地的代理对象。

  • 虚拟代理(virtual proxy):许多需要创建一个资源消耗较大的对象,先创建一个消耗小的对象来表示,真实的对象只有在需要时在会被真正创建。

  • 保护代理(protect proxy):控制一个对象的访问,个不同的用户提供不同级别的使用权限。

  • 缓冲代理(cache proxy'):为某一个目标操作的结果提供临时的存储空间。

  • 智能引用代理(smart reference proxy):当一个对象被引用时,提供一些额外的操作,例如将对象的操作次数记录下来。

应用实例

某软件公司承接了某信息咨询公司的收费商务信息查询系统的开发任务,需求如下:

  1. 在进行商务信息查询之前客户需要通过身份验证,只有合法用户才能够使用该查询系统。
  2. 在进行商务信息查询时系统需要记录查询日志,以便根据查询次数收取相应费用。一般月结。

通过分析,可以使用简介访问的方式实现,如下类图:
[图片上传失败...(image-1d48c3-1520307438616)]
客户端对象通过代理对象简介访问具有商务信息查询功能的真实对象,代理对象中增加身份验证和日志记录等功能。其结构图如下:
[图片上传失败...(image-8771eb-1520307438616)]
图中Searcher充当抽象角色,RealRearcher充当真实主题角色,ProxySearcher充当代理主题角色。
上面是是保护代理和只能引用代理的实例实例。

其他代理模式的应用

  • 远程代理 基于 .NET平台的分布式技术,例如DCOM(分布式组件对象模型),web Service.
  • 虚拟代理 a,对象需要较长的加载时间,无论是对象本身的复杂性还是网络原因,此时可以用一个加载时间相对较短的代理对象来代表真实对象。b,一个对象的加载十分耗费系统资源的时候。
  • 缓冲代理

代理模式总结

模式优点:

  • 能够协调调用者和被调用者,自一定程度上降低了系统的耦合。

  • 客户端可以针对抽象主题角色进行编程,增加和更换代理类无需修改源代码。
    模式缺点:

  • 由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。

  • 实现代理模式需要额外的工作,有些代理模式的实现过程较为复杂。

模式适用场景

  • 当客户端需要访问远程主机中的对象时可以使用远程代理。
  • 当需要一个资源较少的对象代替一个消耗资源较多的对象时可以使用虚拟代理。
  • 当需要控制一个对象的访问,为不同的用户提供不同级别的访问权限时可以使用保护代理。

相关文章

网友评论

      本文标题:2018-03-06

      本文链接:https://www.haomeiwen.com/subject/jrplfftx.html