设计模式-代理模式

代理模式

为另一个对象提供一个替身或占位符以控制对这个对象的访问。

主要解决:对于不能直接访问某些对象的情况,减轻被访问对象的负担
所属类型:结构型模式
如何解决:增加中间层
关键代码:实现与被代理类组合
优点:1、职责清晰;2、高扩展性;3、智能化
缺点:1、有些请求的处理速度变慢;2、有些代理模式实现十分复杂

接下来进行一个例子的演示,是通过代理对象来模拟展示图片。
首先创建一个Image接口,并且定义一个display()方法。在之后的RealImageProxyImage都要来实现这个接口的方法。代码如下所示:

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

简单进行一次总结,代理模式能够让代理对象控制对某对象的访问,被代理对象可以是远程的对象,创建开销大的对象或需要安全控制的对象。

posted @   忠肝义胆-多隆  阅读(15)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
点击右上角即可分享
微信分享提示