Skip to content

代理模式

Alt text

1. 简介

代理模式是一种结构型设计模式,让你能够提供对象的替代品。代理控制着对于原对象的访问,并允许在将请求提交给对象前后进行一些处理。主要解决的问题是为某些资源的访问、对象的类的易用操作上提供方便使用的代理服务。可以理解为你家里的电灯开关,我们不能操作220v电线的人肉连接,但是可以使用开关,避免触电。

2. 模拟场景

为什么要控制对于某个对象的访问呢? 举个例子: 有这样一个消耗大量系统资源的巨型对象, 你只是偶尔需要使用它, 并非总是需要。 Alt text 你可以实现延迟初始化:在实际有需要时再创建该对象。所有客户端都要执行延迟初始代码造成体验不好,而且不同的客户端处理延迟可能不同,就会带来大量重复代码。

3. 解决方案

代理模式建议新建一个与原服务对象接口相同的代理类, 然后更新应用以将代理对象传递给所有原始对象客户端。 代理类接收到客户端请求后会创建实际的服务对象, 并将所有工作委派给它。 Alt text

4. Java中的类

  • java.lang.reflect.Proxy
  • java.rmi.*
  • javax.inject.Inject
  • javax.persistence.PersistenceContext
  • Spring中的JDK与CGLib代理