设计模式-代理模式
代理模式
为另一个对象提供一个替身或占位符以控制对这个对象的访问。
主要解决:对于不能直接访问某些对象的情况,减轻被访问对象的负担
所属类型:结构型模式
如何解决:增加中间层
关键代码:实现与被代理类组合
优点:1、职责清晰;2、高扩展性;3、智能化
缺点:1、有些请求的处理速度变慢;2、有些代理模式实现十分复杂
接下来进行一个例子的演示,是通过代理对象来模拟展示图片。
首先创建一个Image
接口,并且定义一个display()
方法。在之后的RealImage
和ProxyImage
都要来实现这个接口的方法。代码如下所示:
public interface Image {
void diaplay();
}
接下来定义RealImage
类,通过这个类来进行实际Image对象的创建,代码如下所示:
public class RealImage implements Image {
private String fileName;
public RealImage(String fileName) {
this.fileName = fileName;
loadImage();
}
@Override
public void diaplay() {
System.out.println("I'm real Image named : " + fileName);
}
private void loadImage() {
System.out.println("I'm loading image " + fileName);
}
}
接着就来定义代理类ProxyImage
类,通过这个类来操作RealImage
进行对应的操作,只不过只需要进行一次创建,在之后就能够不访问RealImage
,而通过ProxyImage
即可进行操作。
public class ProxyImage implements Image{
private RealImage realImage;
private String fileName;
public ProxyImage(String fileName) {
this.fileName = fileName;
}
@Override
public void diaplay() {
if (realImage == null){
realImage = new RealImage(fileName);
System.out.println("Get read image object.");
}
realImage.diaplay();
}
}
最后就是来对代理模式进行验证。代码如ProxyPatternDemo
所示:
public class ProxyPatternDemo {
public static void main(String[] args) {
Image proxyObject = new ProxyImage("Messi.jpg");
proxyObject.diaplay();
proxyObject.diaplay();
}
}
运行结果如下所示:
I'm loading image Messi.jpg
Get read image object.
I'm real Image named : Messi.jpg
I'm real Image named : Messi.jpg
从结果中可以看出,只在第一次调用的时候对RealImage
进行了创建,在之后就是对其进行调用。并且在这里只对一个对象进行了处理,如果要是处理多个对象,可以在ProxyImage
中创建一个HashMap
来对对象进行管理,这样就能够通过代理对象管理很多RealImage
对象。
Tips
简单进行一次总结,代理模式
能够让代理对象控制对某对象的访问,被代理对象可以是远程的对象,创建开销大的对象或需要安全控制的对象。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!