设计模式——代理模式(三)

28 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2更文挑战」的第11天 点击查看活动详情

前言

今天讲下新的设计模式——代理模式,这种模式和外观模式有那么一点相同,都是不直接访问主题,而是暴露出一个方法去让你使用,而代理模式更像是在主体上包裹了一层让你再去使用。

代理模式

代理模式定义: 给某一个对象提供一个代理或占位符,并由代理对象来控制对原对象的访问。

大白话: 既然是代理那么就要有一个中间人,比如生活中的房产中介,你想看房子啥的不是直接去找开发商就去看了,而是中介领着你去看房子,然后带你去完成买房子这件事。代理模式这样做的好处就是: 当访问者与被访问者不方便直接访问/接触的情况下,提供一个替身来处理事务流程,实际访问的是替身,替身将事务做了一些处理/过滤之后,再转交给本体对象以减轻本体对象的负担。

代码如下:


 // 开发商一侧
class ReadImg {
    constructor(fileName) {
        this.fileName = fileName;
        this.loadFromDisk();   // 初始化即从硬盘中加载,模拟
    }
    // display 对外提供一个方法
    display() {
        console.log('display...' + this.fileName);
    }
    loadFromDisk() {
        console.log('loading...' + this.fileName);
    }
}

   // 房产中介
    class ProxyImg {
        constructor(fileName) {
        this.realImg = new ReadImg(fileName)
    }
        display() {
        this.realImg.display()
    }
    }

    // 客户
    let proxyImg = new ProxyImg('1.png');