1.代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。
结构图:
2.职责
Subject:抽象主题角色,抽象主题类可以是抽象类,也可以是接口,是一个最普通的业务类型定义,无特殊要求。
RealSubject:具体主题角色,也叫被委托角色、被代理角色。是业务逻辑的具体执行者。
Proxy:代理主题角色,也叫委托类、代理类。它把所有抽象主题类定义的方法给具体主题角色实现,并且在具体主题角色处理完毕前后做预处理和善后工作。
3.代码实现抽象主题,定义主要功能:
public interface Subject {
public void Request();
}
具体主题:
public class RealSubject implements Subject{
@Override
public void Request() {
System.out.println("真实的请求");
}
}
具体主题2:
public class RealSubject2 implements Subject{
@Override
public void Request() {
System.out.println("真实的请求2");
}
}
代理类:
public class Proxy implements Subject{
Subject subject;
public Proxy (){//默认的话,是RealSubject的代理
this.subject = new RealSubject();
}
//用于扩展,可以是其他实现Subject接口的代理
public Proxy (Subject subject){
this.subject = subject;
}
@Override
public void Request() {
subject.Request();
}
}
测试类:
public class Test {
public static void main(String[] args) {
Proxy proxy = new Proxy();
proxy.Request();
Proxy proxy2 = new Proxy(new RealSubject2());
proxy2.Request();
}
}
输出结果:
真实的请求
真实的请求2