跳到主要内容

代理模式

代理模式(Proxy Pattern)是一种结构型设计模式,它允许一个对象(代理)充当另一个对象的接口,以控制对该对象的访问。代理对象通常在客户端和实际对象之间充当中介,用于过滤、增强或延迟对实际对象的访问。

代理模式主要有三种类型:

  1. 虚拟代理(Virtual Proxy): 用于延迟加载实际对象,当真正需要访问时再创建和加载实际对象。这对于处理大对象或资源密集型操作很有用。

  2. 保护代理(Protection Proxy): 用于控制对实际对象的访问权限,可以在访问实际对象之前进行权限检查或验证。

  3. 远程代理(Remote Proxy): 用于在不同的地址空间中代理对象,允许通过网络访问远程对象。

以下是一个简单的 JavaScript 示例,演示了虚拟代理的概念:

// Subject(主题)
class RealSubject {
request() {
console.log('RealSubject handles the request.');
}
}

// Proxy(代理)
class Proxy {
constructor() {
this.realSubject = null;
}

request() {
if (!this.realSubject) {
this.realSubject = new RealSubject();
}
this.realSubject.request();
}
}

// 客户端代码
const proxy = new Proxy();
proxy.request();
// Output: RealSubject handles the request.

在这个例子中,RealSubject 是实际的对象,Proxy 是代理对象。Proxy 在调用 request 方法时,首先检查是否已经创建了实际对象 RealSubject,如果没有则创建,然后将请求委托给实际对象。这种延迟加载的方式可以在需要时才创建开销较大的实际对象。

代理模式在实际应用中常用于控制对敏感资源的访问、延迟加载、实现权限控制等场景。