代理模式(Proxy)

First Post:

Last Update:

代理模式(Proxy)

代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。

代理模式结构图

代理模式代码结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Subject类,定义了公共接口,描述实体类和代理类共同的行为。
这样就可以在任何使用实体类的地方使用代理类。
abstract class Subject
{
public abstract void Request( );
}

class RealSubjectSubject
{
public override void Request()
{
//实体类的请求。
}
}

class ProxySubject
{
RealSubject realSubject;
public override void Request( )
{
if(realSubject == null)
{
realSubject = new RealSubject( );
}
realSubject.Request( );
//调同名的方法(继承自同一个接口)
//借此完成代理
}
}

客户端代码
Proxy proxy = new Proxy();
proxy.Request( );

代理模式主要解决的问题

在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。

代理模式应用场合

远程代理=>也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。

(275条消息)代理模式(三):远程代理,虚拟代理,缓冲代理_SunnyMarkLiu的博客-CSDN博客

虚拟代理=>是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。例如(浏览器打开一个html网页,图片框代理了尚未下载的图片)
安全代理=>用来控制真实对象访问时的权限。一般用于对象应该有不同访问权限的时候。
智能代理=>是指当调用实际要使用的对象时,代理处理一些额外的事情。
例如:

  • 计算真实对象的引用次数,当该对象没有引用时,可以自动释放它;
  • 当第一次引用一个持久化对象时,将它装入内存;
  • 在访问一个实际对象前,检查是否已经锁定它,以确保其他对象不能改变它。

这样,就可以通过代理模式来为对象的调用提供额外的业务逻辑。
总的来说:代理模式就是在访问对象的时候引入一定程度的间接性,因为这种间接性,可以附加多种用途。(逻辑增强,控制调用)说白了,代理就是真实对象的代表。

使用代理模式的优点

  1. 职责清晰
    真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。
  2. 代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了中介的作用和保护了目标对象的作用。
  3. 高扩展性