代理模式

中间人

场景


对真实对象进行额外控制

  • 远程通信,使用代理屏蔽网络通信细节
  • 延迟加载,使用代理占位,使用时才真正加载
  • 访问控制,无法直接访问,通过代理访问

特征


  • 真实对象和代理对象实现相同接口,对调用者透明
  • 代理引入额外逻辑

代码


Sample
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public interface Subject{
void doAction();
}

public class Proxy implements Subject{
private Subject subject;

public Proxy(){
subject = new RealSubject();
}
public void doAction(){
//附加逻辑
subject.doAction();
//附加逻辑
}
}

调用逻辑

Sample
1
2
//客户端可以不接触真实对象
Subject subject = new Proxy();

应用


java.lang.reflect.Proxy