什么是设计模式
设计模式是经常使用、大多数人知道,有特定目录的代码设计经验。设计模式可以提高代码可维护性,可提升代码运行效率,也能提高系统可靠性。设计模式可以分为三类,分别是创建型、结构型和行为型。以下就代理模式简要概述。
什么是代理模式
代理模式就是一个类代表另一个类,也就是静态代码代理。我们可以用代理类做一些控制,这种模式也是结构型模式。
应用场景
1、限制目标类的访问
2、控制目标类,在代理类放置一些特殊逻辑达到控制目标类的作用
代理模式与适配器模式区别:
代理模式不改变目标类,而适配器模式会改变传入的对象从而影响内部功能。
代理模式与装饰器模式区别:
代理模式不会对对象的功能进行增加,而装饰器模式会增加目标类功能。
小试牛刀
比如我们下载图片功能,我们第一次下载需要加载图片,第二次则不用加载了以节省内存。此时,我们可以通过代理类进行特殊处理。
对象依赖关系为:
1、创建图片接口并提供下载方法
/**
* 图片
* @author senfel
* @version 1.0
* @date 2022/8/25 11:08
*/
public interface Image {
/**
* 下载图片
*/
void down();
}
2、实现图片接口复写下载方法,并在构造方法调用加载图片方法
/**
* 下载图片
* @author senfel
* @version 1.0
* @date 2022/8/25 11:09
*/
public class RealImage implements Image{
private String imageName;
public RealImage(String imageName) {
this.imageName = imageName;
loadImage();
}
/**
* 加载图片
*/
private void loadImage() {
System.err.println("加载图片》》 名称为: "+imageName);
}
@Override
public void down() {
System.err.println("下载图片》》 名称为: "+imageName);
}
}
3、增加代理类
/**
* 下载图片代理
* @author senfel
* @version 1.0
* @date 2022/8/25 11:10
*/
public class ProxyImage implements Image {
private String imageName;
private RealImage realImage;
public ProxyImage(String imageName) {
this.imageName = imageName;
}
/**
* 下载图片方法
* 特殊处理如果存在对象则不再创建图片对象,直接下载
*/
@Override
public void down() {
if(Objects.isNull(realImage)){
realImage = new RealImage(imageName);
}
realImage.down();
}
}
4、测试代理模式
/**
* 代理模式测试
* @author senfel
* @version 1.0
* @date 2022/8/25 11:28
*/
public class TestProxyPattern {
@Test
public void test(){
//下载图片
ProxyImage proxyImage = new ProxyImage("代理模式测试效果图");
proxyImage.down();
//再次下载
proxyImage.down();
}
}
测试结果:
加载图片》》 名称为: 代理模式测试效果图
下载图片》》 名称为: 代理模式测试效果图
下载图片》》 名称为: 代理模式测试效果图