代理模式是一种结构型设计模式,其目的是通过创建一个代理对象来控制对其他对象的访问。代理模式在访问对象时引入一定程度的间接性,以实现某些额外的控制或功能。

在代理模式中,有三个主要角色:

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/设计模式