您好,欢迎访问三七文档
代理模式ProxyPattern什么是代理模式•代理模式又称为委托模式,是结构型的设计模式之一,它可以为其他对象提供一种代理(proxy)以控制对这个对象的访问。•所谓代理,是指具有与代理元(被代理的对象)具有相同的接口的类,客户端必须通过代理与被代理的目标类进行交互,而代理一般在交互的过程中(交互的前后)进行某些特别的处理。也就是说,代理对象在客户端对象和目标对象之间起到中介的作用,它去掉了客户不能看到的内容和服务或者增添客户需要的额外的新服务。代理模式的结构代理模式的角色与职责•Subject(抽象主题角色)真实主题与代理主题的共同借口。•RealSubject(真实主题角色)定义了代理角色所代表的真实对象。•ProxySubject(代理主题角色)含有对真实主题角色的引用,代理角色通常在将客户端调用传递给真实主题角色之前或之后执行某些操作,而不是单纯的返回真实的对象。SubjectABCbookstorepublishinghousecustomer;我要买书我可以印刷与卖书我可以卖书、打折以及送优惠券被代理代理模式的种类代理模式根据其目的和实现方式不同可分为很多种类,其中常用的几种代理模式简要说明如下:(1)远程代理(RemoteProxy):为一个位于不同的地址空间的对象提供一个本地的代理对象,这个不同的地址空间可以是在同一台主机中,也可是在另一台主机中,远程代理又称为大使(Ambassador)。(2)虚拟代理(VirtualProxy):如果需要创建一个资源消耗较大的对象,先创建一个消耗相对较小的对象来表示,真实对象只在需要时才会被真正创建。(3)保护代理(ProtectProxy):控制对一个对象的访问,可以给不同的用户提供不同级别的使用权限。(4)缓冲代理(CacheProxy):为某一个目标操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果。(5)智能引用代理(SmartReferenceProxy):当一个对象被引用时,提供一些额外的操作,例如将对象被调用的次数记录下来等。为什么要用代理原因一:客户端无法直接操作实际对象。一种情况是你需要调用的对象在另外一台机器上,你需要跨越网络才能访问,如果让你直接coding去调用,你需要处理网络连接、处理打包、解包等等非常复杂的步骤,所以为了简化客户端的处理,我们使用代理模式,在客户端建立一个远程对象的代理,客户端就像调用本地对象一样调用该代理,再由该代理去跟实际对象联系,对于客户端来说可能根本没有感觉到调用的东西在网络另外一端,这实际上就是WebService的工作原理。另一种情况虽然你所要调用的对象就在本地,但是由于调用非常耗时,你怕影响你正常的操作,所以特意找个代理来处理这种耗时情况,一个最容易理解的就是Word里面装了很大一张图片,在word被打开的时候我们肯定要加载里面的内容一起打开,但是如果等加载完这个大图片再打开Word,用户等得可能早已经跳脚了,所以我们可以为这个图片设置一个代理,让代理慢慢打开这个图片而不影响Word本来的打开功能。原因二:除了当前类(目标类)能够提供的功能外,我们还需要补充一些其他功能。代理模式的优点•代理模式的共同优点如下:(1)能够协调调用者和被调用者,在一定程度上降低了系统的耦合度;(2)客户端可以针对抽象主题角色进行编程,增加和更换代理类无须修改源代码,符合开闭原则,系统具有较好的灵活性和可扩展性。•此外,不同类型的代理模式也具有独特的优点,例如:(1)远程代理为位于两个不同地址空间对象的访问提供了一种实现机制,可以将一些消耗资源较多的对象和操作移至性能更好的计算机上,提高系统的整体运行效率;(2)虚拟代理通过一个消耗资源较少的对象来代表一个消耗资源较多的对象,可以在一定程度上节省系统的运行开销;(3)缓冲代理为某一个操作的结果提供临时的缓存存储空间,以便在后续使用中能够共享这些结果,优化系统性能,缩短执行时间。代理模式的缺点•代理模式的主要缺点如下:(1)由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢,例如保护代理。(2)实现代理模式需要额外的工作,而且有些代理模式的实现过程较为复杂,例如远程代理。代理模式的应用场景•代理模式的类型较多,不同类型的代理模式有不同的优缺点,它们应用于不同的场合:(1)当客户端对象需要访问远程主机中的对象时可以使用远程代理。(2)当需要用一个消耗资源较少的对象来代表一个消耗资源较多的对象,从而降低系统开销、缩短运行时间时可以使用虚拟代理,例如一个对象需要很长时间才能完成加载时。(3)当需要为某一个被频繁访问的操作结果提供一个临时存储空间,以供多个客户端共享访问这些结果时可以使用缓冲代理。通过使用缓冲代理,系统无须在客户端每一次访问时都重新执行操作,只需直接从临时缓冲区获取操作结果即可。(4)当需要控制对一个对象的访问,为不同用户提供不同级别的访问权限时可以使用保护代理。(5)当需要为一个对象的访问(引用)提供一些额外的操作时可以使用智能引用代理。代理模式与装饰模式•装饰模式:在不改变借口的前提下,动态扩展对象的访问,是一个动态继承的过程。强调增强。•代理模式:在不改变接口的前提下,控制对象的访问,是类之间的封装和(某方面)的复用。强调控制。
本文标题:代理模式
链接地址:https://www.777doc.com/doc-5708423 .html