6.設(shè)計(jì)模式之代理模式

代理模式:為其他對(duì)象提供一種代理以控制對(duì)這個(gè)對(duì)象的訪問(wèn)

當(dāng)我第一次看到代理模式的定義是,腦海中浮現(xiàn)的一句代碼就是const that = this;,我們通過(guò)that來(lái)代理this的訪問(wèn),雖然沒(méi)有體現(xiàn)控制的意味,但體現(xiàn)了代理的意思。

在日常的開(kāi)發(fā)工作之中,我對(duì)于代理模式的理解是:對(duì)對(duì)象的操作添加過(guò)濾的手段。

之前在工作中遇到一個(gè)場(chǎng)景:平臺(tái)管理系統(tǒng)需要去維護(hù)各子系統(tǒng)的公共數(shù)據(jù)(CommonData),各子系統(tǒng)在使用時(shí)去拉取公共數(shù)據(jù),但是這樣拉取公共數(shù)據(jù)其實(shí)會(huì)是比較大的開(kāi)銷,因?yàn)楣矓?shù)據(jù)的變化比較緩慢,時(shí)效性比較低,我們可以通過(guò)代理拉取公共數(shù)據(jù)的函數(shù)來(lái)操作。代碼如下:

// 拉取公共數(shù)據(jù)函數(shù)
const getCommonData = async (type) => {
    return await Ajax(type);
};

// 代理函數(shù)
const CommonDataMap = new Map();
const getCommonDataProxy = async (type) => {
    let data = CommonDataMap.get(type);
    if (!data) {
        data = await getCommonData(type);
        CommonDataMap.set(type, data);
    }

    return data;
};

使用場(chǎng)景

  1. 遠(yuǎn)程代理:為一個(gè)對(duì)象在不同的地址空間提供局部代表,這樣可以隱藏一個(gè)對(duì)象存在不同地址空間的事實(shí)
  2. 虛擬代理:根據(jù)需要?jiǎng)?chuàng)建開(kāi)銷很大的對(duì)象,通過(guò)它來(lái)存放實(shí)例化需要很長(zhǎng)時(shí)間的真實(shí)對(duì)象
  3. 安全代理:用來(lái)控制,真實(shí)對(duì)象訪問(wèn)時(shí)的權(quán)限
  4. 智能指引:值當(dāng)調(diào)用真實(shí)的對(duì)象時(shí),代理處理另外一些事情

我的經(jīng)驗(yàn)

在前端中,我遇到或使用代理模式的場(chǎng)景有:

  • 需要對(duì)某些類、方法的使用做一層過(guò)濾
  • 需要監(jiān)聽(tīng)某些類、方法的使用并做處理
  • 某些DOM懶加載的情況(比如圖片懶加載)

參考

大話設(shè)計(jì)模式 -- 程杰

個(gè)人博客

北落師門

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容