概念
什么是代理模式
为其他对象提供一种代理以控制对这个对象的访问
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小结
代理的作用
-
控制
-
保护
-
提高效率
网友评论