Java之 代理模式

2021-08-27  本文已影响0人  五月笙

概念


什么是代理模式

为其他对象提供一种代理以控制对这个对象的访问

UML类图

image.png

代码实现

public interface Request {

    void downloadVideo(String videoId);

}

public class VideoRequest implements Request {

    @Override
    public void downloadVideo(String videoId) {
        System.out.println("下载视频Id: " + videoId);
    }

}
public class VideoProxy implements Request {

    private Request request;

    public VideoProxy(Request request) {
        this.request = request;
    }

    @Override
    public void downloadVideo(String videoId) {
        if (!checkId(videoId)) {
            System.out.println("你输入的Id:" + videoId + "不存在");
            return;
        }
        request.downloadVideo(videoId);
    }

    private boolean checkId(String videoId) {
        if (videoId.equals("id-key")) {
            return true;
        }
        return false;
    }
}

VideoRequest videoRequest = new VideoRequest();
VideoProxy proxy = new VideoProxy(videoRequest);
proxy.downloadVideo("id-key");

分类


设置访问RealSubject功能的权限

实例:公司内部访问外网

提供临时的缓存存储空间

实例:Http代理

只有真正需要实例的时候才会初始化

实例:图片延迟加载

拓展


代理与委托

代理人只代理他能解决的问题,当解决不了的时候,代理人会委托本人处理

代理与依赖注入

private Request request;

public VideoProxy(Request request) {
    this.request = request;
}

VideoRequest videoRequest = new VideoRequest();
VideoProxy proxy = new VideoProxy(videoRequest);

通过构造函数注入的方式将RealSubject对象注入到Proxy中,参考孟老师的依赖注入

代理与适配模式

image.png

小结


代理的作用

参考


上一篇 下一篇

猜你喜欢

热点阅读