Proxy(代理模式)

目的

代理者是指一個類別可以作為其它東西的接口。代理者可以作任何東西的接口:網絡連接、內存中的大對象、文件或其它昂貴或無法複製的資源。

Code

class Flower {}
// 源对象
class Jack {
    constructor (target) {
      console.log('1')
        this.target = target;
        //這個target 等於 proxyObj
    }
    sendFlower (target) {
            console.log('2')
        const flower = new Flower();
        this.target.receiveFlower(flower)
    }
}
// 目标对象
class Rose {
    receiveFlower (flower) {
            console.log('3')
        console.log('收到花: ' + flower)
    }
}
// 代理对象
class ProxyObj {
    constructor () {
                  console.log('4')
        this.target = new Rose();
    }
    receiveFlower (flower) {
                  console.log('5')
        this.sendFlower(flower)
    }
    sendFlower (flower) {
                        console.log('6')
        this.target.receiveFlower(flower)
    }
}
const proxyObj = new ProxyObj();
const jack = new Jack(proxyObj);
jack.sendFlower(proxyObj); 

流程

  • 4、1、2、5、6、3

優點

  • 能將代理對象與被調用對象隔離,降低系統耦合度。對在客戶端與目標對象之間,起到一個中介作用,可以保護目標對象。

  • 可以擴展目標對象的功能,通過修改代理對象就可以達到,符合封閉原則。

缺點

  • 處理請求速度有差,非直接訪問存在開銷。

不同點

  • 裝飾器模式:擴展功能,原有功能不變,且可以直接使用

  • 代理模式:顯示原有功能,但是是經過限制之後的。

Last updated