梦想还是要有的,万一忘了咋办?

0%

代理模式

概述

为其它对象提供一种代理以控制这个对象的访问。

类图

upload successful

角色

  • 抽象主题Subject
  • 代理主题ProxySubject
  • 真实主题 Real Subject

示例

Subject.java

1
2
3
public interface Subject{
public void request();
}

RealSubject.java

1
2
3
4
5
public class RealSubject implements Subject{
public void request(){

}
}

ProxySubject.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class ProxySubject implements Subject {

private Subject subject;
public ProxySubject(Subject subject){
this.subject=subject;
}

public void request(){
this.beforeReqeust();
subject.request();
this.afterRequest();
}

private void beforeRequest(){}
private void afterRequest(){}
}

一个代理主题类可以代理多个真实主题、具体代理哪个真实主题是由高层的应用模块决定的,可以通过代理类的构造函数传递被代理者。

应用

种类

  • 远程代理
  • 虚拟代理
  • 保护代理
  • 缓存代理
  • 同步代理
  • 智能引用

优点

  • 职责清晰
  • 高扩展性
  • 智能化

使用场景

代理模式应用非常广泛,达到一个系统框架、企业平台,小到事务处理、代码片段,随处可见代理模式的应用。例如,Java Rmi 的远程调用就是一种代理模式的应用,现在流行的AOP也是通过代理模式实现的。

实例

upload successful