代理模式:软件设计中的“贴心小助手”

91 阅读2分钟

🌸哈喽,亲爱的小伙伴们,今天我想和大家分享一个软件设计中的“贴心小助手”——代理模式。让我们一起来揭开它的神秘面纱吧!

🍃首先,咱们来聊聊什么是代理模式。代理模式是一种设计模式,它提供了一种方式,为其他对象提供一种代理以控制对这个对象的访问。

🎁接下来,我给举个例子。假设你需要实现一个图片浏览器,可以显示图片。但是,图片的加载比较耗时。需要使用一个代理类去处理图片加载。加载完成后通知图片浏览器。

下面,我们就看下如何实现吧🥰😘😋

首先,根据描述,看下UML图

截屏2023-09-01 14.59.39.png

咱们将图片加载过程,放入ProxyImageView进行处理,处理完成后,使用RealImage来显示图片。下面通过代码来展示下

    var ImageView = function () {}
    ImageView.prototype.show = function () {
        throw new Error("子类必须实现此方法");
    }

    var ProxyImageView = function (realImage) {
        this.realImage = realImage
    }
    ProxyImageView.prototype = Object.create(ImageView.prototype)
    ProxyImageView.prototype.constructor = ProxyImageView

    ProxyImageView.prototype.show = function (url) {
        // 进行下载。。。
        setTimeout(() => {
            let data = "完成下载的data"
            this.realImage.show(data)
        }, 3000);
    }

    var RealImageView = function () {}
    RealImageView.prototype = Object.create(ImageView.prototype)
    RealImageView.prototype.constructor = RealImageView

    RealImageView.prototype.show = function (data) {
        console.log(data);
    }

    let realImageView = new RealImageView()
    let proxyImageView = new ProxyImageView(realImageView)
    proxyImageView.show() //完成下载的data

🌙代理模式和适配器模式、装饰器模式比较像。与适配器模式比较,适配器模式主要改变所考虑对象的接口,而代理模式不能改变所代理类的接口。 与装饰器模式对比,装饰器模式为了增强功能,而代理模式是为了加以控制。

✨另外,代理模式有两种类型:虚拟代理和远程代理。虚拟代理是为了减少系统开销而延迟加载对象,远程代理则是为了将一个对象放到另一个进程中。

🍀最后,我想说的是,代理模式是一种非常有用的设计模式,它可以帮助我们更好地设计软件。希望大家在阅读完这篇文章后,能够更好地理解和使用代理模式。

🔥希望这篇文章能对你们有所帮助,让我们一起在学习中成长吧!