Java之 代理模式

概念


什么是代理模式

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

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");

分类


  • Access Proxy

设置访问RealSubject功能的权限

实例:公司内部访问外网

  • Cache Proxy

提供临时的缓存存储空间

实例:Http代理

  • Virtual Proxy

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

实例:图片延迟加载

拓展


代理与委托

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

代理与依赖注入

private Request request;

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

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

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

代理与适配模式

image.png

小结


代理的作用

  • 控制

  • 保护

  • 提高效率

参考


©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容