溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何使用javascript中的代理模式

發(fā)布時(shí)間:2020-08-03 11:47:52 來(lái)源:億速云 閱讀:154 作者:小豬 欄目:web開發(fā)

這篇文章主要講解了如何使用javascript中的代理模式,內(nèi)容清晰明了,對(duì)此有興趣的小伙伴可以學(xué)習(xí)一下,相信大家閱讀完之后會(huì)有幫助。

介紹:代理使我們很常見的一眾模式,proxy,nginx都稱之為代理,代理是什么意思呢?代理模式在客戶端和目標(biāo)對(duì)象之間加入一個(gè)新的代理對(duì)象,代理對(duì)象起到一個(gè)中介作用,去掉客戶不能看到的內(nèi)容和服務(wù),或者增添客戶需要的額外服務(wù)。

定義:給某一個(gè)對(duì)象提供一個(gè)代理,并由代理對(duì)象控制對(duì)原對(duì)象的引用。代理模式是一種對(duì)象結(jié)構(gòu)型模式。

場(chǎng)景:我們還是以畫圖形為例,我將所有的繪圖動(dòng)作包裝到Shape類中,使用代理模式來(lái)部分開放功能給客戶。

示例:

var Shape = function(color){
  console.log('創(chuàng)建了一個(gè)對(duì)象');
  this.color = color;
  this.x;
  this.y;
  this.radius;
 
  this.setAttr = function(x, y, radius){
    this.x = x;
    this.y = y;
    this.radius = radius;
  }
  this.drawCircle = function(){
    console.log('畫圓: 顏色:' + this.color + ' x:' + this.x + ' y:' + this.y + ' radius:' + this.radius)
  }
  this.drawSquare = function(){
    console.log('畫方: 顏色:' + this.color + ' x:' + this.x + ' y:' + this.y )
  }
  this.drawTriangle = function(){
    console.log('畫三角: 顏色:' + this.color + ' x:' + this.x + ' y:' + this.y )
  }
}
 
var proxyShape = function(color, x, y, radius){
  this.color = color;
  this.x = x;
  this.y = y;
  this.radius = radius;
  this.shape = null;
  this.drawSquare = function(){
    if(this.shape === null){
      this.shape = new Shape(this.color);
      this.shape.setAttr(this.x, this.y, this.radius);
    }
    this.shape.drawSquare();
  }
}
 
var square = new proxyShape('red', 10, 10);
square.drawSquare();
square.drawSquare();
// 創(chuàng)建了一個(gè)對(duì)象
// 畫方: 顏色:red x:10 y:10
// 畫方: 顏色:red x:10 y:10

你可以在proxyShape中增加一些日志,權(quán)限等任務(wù)。因?yàn)榇眍惖拇嬖冢略龅娜蝿?wù)不會(huì)影響到Shape類。

代理模式為對(duì)象的簡(jiǎn)介訪問提供了解決方案,可以對(duì)對(duì)象的訪問進(jìn)行控制。

代理模式總結(jié):

優(yōu)點(diǎn):
* 代理模式可以協(xié)調(diào)調(diào)用者和被調(diào)用這,一定程度降低了系統(tǒng)耦合度。

缺點(diǎn):
* 由于增加了代理對(duì)象,因此有些類型的代理模式可能會(huì)造成請(qǐng)求的處理速度變慢。
* 實(shí)現(xiàn)代理模式需要額外的工作,有些代理模式的實(shí)現(xiàn)非常復(fù)雜。

適用場(chǎng)景:
* 當(dāng)客戶端需要訪問遠(yuǎn)程主機(jī)中的對(duì)象時(shí),可以使用遠(yuǎn)程代理。
* 當(dāng)需要用一個(gè)消耗資源較少的對(duì)象來(lái)代表資源消耗較多的對(duì)象,可以使用虛擬代理
* 當(dāng)需要控制一個(gè)對(duì)象的訪問,為不同用戶提供不同級(jí)別的訪問權(quán)限時(shí)可以使用保護(hù)代理

看完上述內(nèi)容,是不是對(duì)如何使用javascript中的代理模式有進(jìn)一步的了解,如果還想學(xué)習(xí)更多內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI