13 代理模式

代理模式(Proxy):为另一个对象提供一个替身或占位符以控制对这个对象的访问。

UML类图:

Subject为RealSubject和Proxy提供了统一的接口,Proxy就是RealSubject的代理。RealSubject是真正做事的对象,是被Proxy代理和控制访问的对象。Proxy持有RealSubject的引用,客户想与RealSubject交互的话,必须经过Proxy代理。

上面就是代理模式的一般形式,但代理模式有许多变体。典型的有远程代理、虚拟代理和保护代理。

1 远程代理控制访问远程对象

如Web Service便是用远程代理的形式。

2 虚拟代理控制访问创建开销大的资源

开销大,可能是网络请求流量大、耗时长,也可能是IO读写满等等。比如,网页中的图片对象,由于图片请求比较耗时,但为了兼顾排版美观,就先用于图片大小一致的方框占位,等图片下载好后,填充到占位的地方,这便是一种虚拟代理。

3 保护代理基于权限控制对资源的访问

4 智能引用代理(Smart Reference Proxy),在调用真实对象时,代理处理另外一些事。如计算真实对象的引用次数,这样当该对象没有引用时,可以自动释放它。(看来GC就是这类啊)

另外,还有许多种代理的变体,比如防火墙代理(Firewall Proxy),控制网络资源的访问,保护主体免于“坏客户”的侵害;缓存代理(Caching Proxy)为开销大的运算结果提供暂时存储,它也允许多个客户共享;同步代理(Synchronization Proxy)在多线程的情况下为主体提供安全的访问等等,好深奥,好好学。

这节没有代码,后续深入学习web service。

时间: 2024-10-14 10:58:21

13 代理模式的相关文章

C#设计模式(13)——代理模式(Proxy Pattern)

一.引言 在软件开发过程中,有些对象有时候会由于网络或其他的障碍,以至于不能够或者不能直接访问到这些对象,如果直接访问对象给系统带来不必要的复杂性,这时候可以在客户端和目标对象之间增加一层中间层,让代理对象代替目标对象,然后客户端只需要访问代理对象,由代理对象去帮我们去请求目标对象并返回结果给客户端,这样的一个解决思路就是今天要介绍的代理模式. 二.代理模式的详细介绍 代理模式按照使用目的可以分为以下几种: 远程(Remote)代理:为一个位于不同的地址空间的对象提供一个局域代表对象.这个不同的

13.代理模式(Proxy Pattern)

using System; namespace ConsoleApplication6 { class Program { static void Main(string[] args) { // 创建一个代理对象并发出请求 Person proxy = new Friend(); proxy.BuyProduct(); Console.Read(); } } // 抽象主题角色 public abstract class Person { public abstract void BuyPro

代理模式 & Java原生动态代理技术 & CGLib动态代理技术

第一部分.代理模式  代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务.(其实就是在代理类中关联一个委托类的实例,然后在代理类中进行包装). UML图如下: 第二部分.在Java中实现代理模式  按照代理的创建时期,代理类可以分

NET设计模式 第二部分 结构性模式(13):代理模式(Proxy Pattern)

代理模式(Proxy Pattern) ——.NET设计模式系列之十四 Terrylee,2006年5月 摘要:在软件系统中,有些对象有时候由于跨越网络或者其他的障碍,而不能够或者不想直接访问另一个对象,如果直接访问会给系统带来不必要的复杂性,这时候可以在客户程序和目标对象之间增加一层中间层,让代理对象来代替目标对象打点一切.这就是本文要说的Proxy模式. 主要内容 1.例说Proxy模式 2.Proxy模式效果及实现要点 …… 概述 在软件系统中,有些对象有时候由于跨越网络或者其他的障碍,而

13 结构型模式-----代理模式

模式动机(Proxy Pattern):引入一个代理对象负责对真实对象的访问.将代理对象和真实对象的公共接口提取出来,用Subject接口表示.具体结构图及其分析如下: 模式结构图: 模式代码: bt_代理模式.h: 1 #ifndef PP_H 2 #define PP_H 3 #include <iostream> 4 using namespace std; 5 6 /* 7 抽象主题类,定义了RealSubject和Proxy的公共接口,这样就可以在 8 使用RealSubject的地

13.设计模式_代理模式

一.引言 在软件开发过程中,有些对象有时候会由于网络或其他的障碍,以至于不能够或者不能直接访问到这些对象,如果直接访问对象给系统带来不必要的复杂性,这时候可以在客户端和目标对象之间增加一层中间层,让代理对象代替目标对象,然后客户端只需要访问代理对象,由代理对象去帮我们去请求目标对象并返回结果给客户端,这样的一个解决思路就是今天要介绍的代理模式. 二.代理模式的详细介绍 代理模式按照使用目的可以分为以下几种: 远程(Remote)代理:为一个位于不同的地址空间的对象提供一个局域代表对象.这个不同的

设计模式的征途—13.代理(Proxy)模式

所谓代购,简单说来就是找人帮忙购买所需要的商品.代购分为两种类型,一种是因为在当地买不到某件商品,又或者是因为当地这件商品的价格比其他地区的贵,因此托人在其他地区甚至国外购买该商品,然后通过快递发货或直接携带回来.另一种则是消费者对想要购买的商品相关信息的缺乏,自己无法确定其实际价值,因此只好委托中介讲价或购买.在软件开发中,有一种设计模式可以提供与袋盖类似的功能,由于某些原因,客户端不想或者不能直接访问某个对象,此时可以通过一个称之为“代理”的第三者来实现间接访问,该方案对应的设计模式则被称为

代理模式(Proxy)

代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问. 在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 代理模式一般涉及到的角色有 抽象角色:声明真实对象和代理对象的共工接口 代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象.同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装. 真实角色:代理角色所代表的真实对

[设计模式]代理模式

1. 定义 为其他对象提供一种代理以控制对这个对象的访问. 代理模式是通过创建一个代理对象,用这个代理对象去代表真实的对象,客户端得到这个代理对象后,对客户端并没有什么影响,就跟得到了真实对象一样来使用.    当客户端操作这个代理对象的时候,实际上功能最终还是会由真实的对象来完成,只不过是通过代理操作的,也就是客户端操作代理,代理操作真正的对象. 2. 类图 Proxy: 代理对象,通常包含了以下功能,实现了与具体目标对象一样的借口,保存一个指向具体目标对象的引用,可以在需要的时候调用具体的目