代理模式是一种结构型设计模式,它可以让我们通过一个代理对象来访问一个真实的目标对象,从而实现对目标对象的功能扩展或保护。代理模式的主要角色有三个:
代理模式可以帮助我们解决以下几种问题:
根据代理模式的定义,我们可以用以下的类图来表示它的结构:
其中,Client是客户端类,它需要使用Subject接口提供的方法。Proxy是代理类,它持有一个RealSubject的引用,并且实现了Subject接口。RealSubject是真实类,它也实现了Subject接口,并且定义了具体的业务逻辑。
代理模式有多种类型,例如静态代理、动态代理等,代理模式也有自己的优缺点,使用时需要根据具体的场景和需求来选择合适的类型和方式。
下面我们用Java代码来实现一个静态代理的例子:
// 抽象主题接口
public interface Subject {
// 定义一个抽象方法
void request();
}
// 真实主题类
public class RealSubject implements Subject {
// 实现抽象方法
@Override
public void request() {
// 真实的业务逻辑
System.out.println("RealSubject is doing something...");
}
}
// 代理主题类
public class Proxy implements Subject {
// 持有一个真实主题的引用
private RealSubject realSubject;
// 构造方法,传入一个真实主题对象
public Proxy(RealSubject realSubject) {
this.realSubject = realSubject;
}
// 实现抽象方法
@Override
public void request() {
// 在调用真实主题之前,可以执行一些额外操作
System.out.println("Proxy is doing something before...");
// 调用真实主题的方法
realSubject.request();
// 在调用真实主题之后,可以执行一些额外操作
System.out.println("Proxy is doing something after...");
}
}
// 客户端类
public class Client {
public static void main(String[] args) {
// 创建一个真实主题对象
RealSubject realSubject = new RealSubject();
// 创建一个代理对象,并传入真实主题对象
Proxy proxy = new Proxy(realSubject);
// 使用代理对象来调用抽象方法
proxy.request();
}
}
运行结果如下:
Proxy is doing something before...
RealSubject is doing something...
Proxy is doing something after...
<< · Back Index ·>>