在代理模式中,有三个主要角色:
1. 抽象主题(Subject): 定义了真实主题和代理主题的共同接口,这样在任何使用真实主题的地方都可以使用代理主题。
public interface Subject {
void request();
}
2. 真实主题(RealSubject): 实现了抽象主题接口,是被代理的真正对象。
public class RealSubject implements Subject {
@Override
public void request() {
System.out.println("RealSubject: Handling request.");
}
}
3. 代理(Proxy): 实现了抽象主题接口,并在内部保存一个真实主题的引用。代理通常在执行真实主题的操作之前或之后执行一些额外的操作,如权限控制、缓存等。
public class Proxy implements Subject {
private RealSubject realSubject;
public Proxy() {
this.realSubject = new RealSubject();
}
@Override
public void request() {
// 可以在调用真实主题方法前后执行一些额外的操作
System.out.println("Proxy: Logging before request.");
// 调用真实主题的方法
realSubject.request();
// 可以在调用真实主题方法前后执行一些额外的操作
System.out.println("Proxy: Logging after request.");
}
}
4. 客户端代码: 创建代理对象并使用代理对象调用方法。
public class Client {
public static void main(String[] args) {
// 使用代理
Proxy proxy = new Proxy();
proxy.request();
}
}
在这个例子中,客户端通过代理对象访问真实主题,而代理在调用真实主题的方法前后可以执行一些额外的操作。代理模式的优点包括对真实主题的保护、延迟加载等,使得系统更加灵活。
转载请注明出处:http://www.zyzy.cn/article/detail/13949/设计模式