6.設計模式之代理模式

代理模式:爲其餘對象提供一種代理以控制對這個對象的訪問

當我第一次看到代理模式的定義是,腦海中浮現的一句代碼就是const that = this;,咱們經過that來代理this的訪問,雖然沒有體現控制的意味,但體現了代理的意思。前端

在平常的開發工做之中,我對於代理模式的理解是:對對象的操做添加過濾的手段git

以前在工做中遇到一個場景:平臺管理系統須要去維護各子系統的公共數據(CommonData),各子系統在使用時去拉取公共數據,可是這樣拉取公共數據其實會是比較大的開銷,由於公共數據的變化比較緩慢,時效性比較低,咱們能夠經過代理拉取公共數據的函數來操做。代碼以下:github

// 拉取公共數據函數設計模式

const getCommonData = async (type) => {
 return await Ajax(type);
};
​
// 代理函數
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;
};

使用場景

  1. 遠程代理:爲一個對象在不一樣的地址空間提供局部表明,這樣能夠隱藏一個對象存在不一樣地址空間的事實
  2. 虛擬代理:根據須要建立開銷很大的對象,經過它來存放實例化須要很長時間的真實對象
  3. 安全代理:用來控制,真實對象訪問時的權限
  4. 智能指引:值當調用真實的對象時,代理處理另一些事情

個人經驗

在前端中,我遇到或使用代理模式的場景有:安全

  • 須要對某些類、方法的使用作一層過濾
  • 須要監聽某些類、方法的使用並作處理
  • 某些DOM懶加載的狀況(好比圖片懶加載)
    • *
參考

大話設計模式 -- 程傑async

我的博客

北落師門函數

相關文章
相關標籤/搜索