开启掘金成长之旅!这是我参与「掘金日新计划 · 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');