代理模式的作用:
为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用
设计角色:
1:抽象主题角色.
2:代理主题角色. (含有对真实主题的引用),通常在调用真实主题的方法前后加入些其他的操作, 这是目的所在.
3:真实主题角色.
Code Demo:
抽象主题角色:
public abstract class Subject {
abstract void request();
}
真实主题角色:
public class RealSubject extends Subject{
public void request() {
System.out.println("request go");
}
}
代理主题角色:
public class ProxySubject extends Subject{
private RealSubject realSubject;
public void request() {
befRequest();
if (null == realSubject) {
realSubject = new RealSubject();
}
realSubject.request();
aftRequest();
}
private void befRequest() {
System.out.println("before request");
}
private void aftRequest() {
System.out.println("after request");
}
}