23种设计模式之代理模式(Proxy Pattern)

前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将23种设计模式中的代理模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。
如果文章有什么需要改进的地方还请大佬不吝赐教
小威在此先感谢各位大佬啦~~
在这里插入图片描述

个人主页:小威要向诸佬学习呀
个人简介:大家好,我是小威,一个想要与大家共同进步的男人
目前状况:24届毕业生,在一家满意的公司实习

欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,我亲爱的大佬

以下正文开始
23种设计模式之代理模式(Proxy Pattern)_第1张图片

文章目录

  • 代理模式概念
  • 代理模式角色
  • 代理模式应用场景
  • 代理模式代码案例
  • 代理模式小结
  • 图书推荐

代理模式概念

代理模式是一种常用的结构性设计模式,它可以在不改变原始对象的情况下,为对象提供一个代替者或占位符,以控制对原始对象的访问。

代理模式分为两种类型:静态代理和动态代理。静态代理是指代理类在编译时已经确定并实现,而动态代理是指代理类在运行时动态生成的

代理模式角色

在代理模式中,有三个角色:

  • 抽象角色:定义了真实对象和代理对象的公共接口,这样在任何使用真实对象的地方都可以使用代理对象。

  • 真实角色:代表了真实对象,是我们要使用的对象。

  • 代理角色:代表了代理对象,它包含了一个指向真实对象的引用,从而可以操作真实对象。

代理模式应用场景

代理模式有多种应用场景,其中最常见的是远程代理、虚拟代理和保护代理。

远程代理:可以隐藏一个对象存在于不同地址空间的事实,使得客户端可以像调用本地对象一样调用远程对象。

虚拟代理:可以延迟对象的创建,只有到真正需要使用对象的时候才会创建,这样可以节省系统资源,提高程序的运行效率。

保护代理:控制对真实对象的访问,可以在真实对象被访问前进行权限检查和过滤等操作。

总的来说,代理模式可以提高系统的安全性、稳定性和灵活性,适用于各种复杂场景下的开发需求。

代理模式代码案例

以下是一个使用Java实现代理模式的例子:

首先,我们定义一个接口 Image,表示一个图片对象,其中 display() 方法用于显示图片。

public interface Image {
    void display();
}

然后,我们实现一个具体的图片对象类 RealImage,其中 display() 方法用于加载并显示图片。

public class RealImage implements Image {
    private String filename;

    public RealImage(String filename) {
        this.filename = filename;
        loadFromDisk();
    }

    private void loadFromDisk() {
        System.out.println("Loading " + filename);
    }

    public void display() {
        System.out.println("Displaying " + filename);
    }
}

接下来,我们创建一个代理对象类 ProxyImage,它持有一个 RealImage 对象,并在需要的时候才创建和加载该对象。

public class ProxyImage implements Image {
    private RealImage realImage;
    private String filename;

    public ProxyImage(String filename) {
        this.filename = filename;
    }

    public void display() {
        if (realImage == null) {
            realImage = new RealImage(filename);
        }
        realImage.display();
    }
}

最后,我们可以通过以下方式来测试代理模式的实现:

public class ProxyPatternTest {
    public static void main(String[] args) {
        Image image = new ProxyImage("test.jpg");
        image.display();
        System.out.println();

        // 第二次访问时,图片已经被加载过了,不再需要重新创建
        image.display();
    }
}

运行上述代码,输出如下:

Loading test.jpg
Displaying test.jpg

Displaying test.jpg

可以看到,在第一次访问时,代理对象创建了一个真实的图片对象,并调用其 display() 方法来加载并显示图片。在第二次访问时,代理对象直接调用真实的图片对象的 display() 方法,无需再去创建和加载图片。这样,代理模式就实现了对真实对象的访问控制和管理。

代理模式小结

代理模式是一种常见的结构性设计模式,它通过引入代理角色来控制对真实对象的访问,从而增强了系统的安全性、稳定性和灵活性。代理模式分为静态代理和动态代理两种类型,应用场景包括远程代理、虚拟代理和保护代理等

图书推荐

本期推荐书籍为《设计模式:可复用面向对象软件的基础(典藏版)》
业内知名的4人著作,本书是引导读者走出软件设计迷宫的指路明灯,凝聚了软件开发界几十年设计经验的结晶。


粉丝福利:评论区任意留言可参与活动抽奖(可评论最多五条,抽取三名欧皇)

京东自营购买链接:点击购买

好了,本篇文章就先分享到这里了,后续将会继续介绍23种设计模式之其他模式,感谢大佬认真读完支持咯~
在这里插入图片描述

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起讨论
希望能和诸佬们一起努力,今后我们顶峰相见
再次感谢各位小伙伴儿们的支持

在这里插入图片描述

你可能感兴趣的:(一天一种设计模式,代理模式,设计模式)