文章目录
- 什么是代理模式
- 举例
- 结构
- 优缺点
- 优点
- 缺点
- 代码示例
- 与代理模式相近的设计模式
什么是代理模式
代理模式(Proxy Pattern)是一种结构型设计模式,它允许你提供一个间接访问对象的方式,以控制对对象的访问。这种模式通常在不改变原始类代码的情况下,添加一些额外的逻辑或控制。
想象一下你有一个类 A,但是你不希望直接使用它,可能是因为它需要进行一些复杂的操作或者是因为你想对其进行保护。这时你可以创建一个代理类 B,它具有与类 A 相同的接口,这样客户端代码可以通过代理类 B 访问类 A。代理类 B 可以在调用类 A 的方法之前或之后添加额外的逻辑。
举例
假设你有一个网络下载器类 Downloader
,它负责从互联网下载文件。但是,直接使用 Downloader
类可能存在安全风险,因为它可以访问互联网上的任何文件。这时你可以创建一个代理类 DownloaderProxy
,它实现与 Downloader
相同的接口,但在调用下载方法之前,它会检查文件的类型或者权限。这样,即使在使用 DownloaderProxy
时,你也可以控制文件下载的行为。
在实际开发中,代理模式可以用于实现许多场景,比如远程代理、虚拟代理、保护代理等。每种代理类型都有自己的特点和用途,但它们的基本原理都是相同的:通过引入一个中间层(代理),来控制对原始对象的访问。
结构
代理模式由以下几个结构组成:
- Subject(抽象主题):Subject 定义了 RealSubject 和 Proxy 的共同接口,这样在任何使用 RealSubject 的地方都可以使用 Proxy。这通常是一个接口或抽象类。
- RealSubject(真实主题):RealSubject 是实际执行业务逻辑的类。在代理模式中,客户端最终想要使用的是 RealSubject 提供的功能。
- Proxy(代理):Proxy 类包含一个对 RealSubject 对象的引用,并提供与 RealSubject 相同的接口,以便可以用 Proxy 来替代 RealSubject。Proxy 通常负责在调用 RealSubject 之前或之后执行一些额外的操作,例如权限检查、缓存、延迟加载等。
在这个结构中,客户端通过代理访问真实主题,代理在必要时将请求传递给真实主题,并在调用前后执行一些额外的逻辑。这种方式使得代理可以控制对真实主题的访问,并在不改变客户端代码的情况下,提供额外的功能。
优缺点
代理模式具有以下优点和缺点:
优点
- 代理控制访问:代理模式允许代理对象控制对真实对象的访问。这使得代理可以在访问前后执行一些额外的逻辑,如权限验证、缓存、日志记录等。
- 解耦合:通过引入代理对象,客户端和真实对象之间的耦合度降低。客户端可以通过代理间接访问真实对象,而不必直接与其交互,从而更容易管理和扩展系统。
- 保护真实对象:代理可以充当真实对象的保护层,控制对真实对象的访问。这可以防止客户端直接访问真实对象,从而提高系统的安全性。
- 延迟加载:代理模式支持延迟加载,即在需要时才创