代理模式:最基础的设计模式,策略模式等都用到代理模式
核心:访问控制
就是将被代理的类作为成员变量。
为其他对象提供一个代理类去使用被代理的类
- 定义一个接口
首先,我们需要定义一个接口,这是原始对象和代理对象都要实现的接口。
// Subject.java
public interface Subject {
void request();
}
- 实现原始对象
接下来,实现这个接口的原始对象。
// RealSubject.java
public class RealSubject implements Subject {
@Override
public void request() {
System.out.println("RealSubject: Handling request.");
}
}
- 实现代理对象
然后,实现这个接口的代理对象。代理对象包含对原始对象的引用,并控制对它的访问。
// Proxy.java
public class Proxy implements Subject {
private RealSubject realSubject;
@Override
public void request() {
if (realSubject == null) {
realSubject = new RealSubject();
}
System.out.println("Proxy: Logging request before forwarding to RealSubject.");
realSubject.request();
System.out.println("Proxy: Logging request after forwarding to RealSubject.");
}
}
- 客户端代码
最后,使用代理对象来代替直接使用原始对象。
// Client.java
public class Client {
public static void main(String[] args) {
Subject proxy = new Proxy();
proxy.request();
}
}
和装饰器模式的区别
如果代理模式的代理类上又实现了要给额外的功能,那么就是装饰器了,新增了功能。