欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

javascript設(shè)計(jì)模式 – 代理模式原理與用法實(shí)例分析

 更新時(shí)間:2020年04月16日 08:35:36   作者:李小強(qiáng)  
這篇文章主要介紹了javascript設(shè)計(jì)模式 – 代理模式,結(jié)合實(shí)例形式分析了javascript代理模式相關(guān)概念、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了javascript設(shè)計(jì)模式 – 代理模式原理與用法。分享給大家供大家參考,具體如下:

介紹:代理使我們很常見(jiàn)的一眾模式,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)部分開(kā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)介訪問(wèn)提供了解決方案,可以對(duì)對(duì)象的訪問(wèn)進(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)客戶端需要訪問(wèn)遠(yuǎn)程主機(jī)中的對(duì)象時(shí),可以使用遠(yuǎn)程代理。
* 當(dāng)需要用一個(gè)消耗資源較少的對(duì)象來(lái)代表資源消耗較多的對(duì)象,可以使用虛擬代理
* 當(dāng)需要控制一個(gè)對(duì)象的訪問(wèn),為不同用戶提供不同級(jí)別的訪問(wèn)權(quán)限時(shí)可以使用保護(hù)代理

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運(yùn)行工具http://tools.jb51.net/code/HtmlJsRun測(cè)試上述代碼運(yùn)行效果。

更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)

希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • sencha ext js 6 快速入門(必看)

    sencha ext js 6 快速入門(必看)

    下面小編就為大家?guī)?lái)一篇sencha ext js 6 快速入門(必看)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-06-06
  • 關(guān)于Blog頂部的滾動(dòng)導(dǎo)航條代碼

    關(guān)于Blog頂部的滾動(dòng)導(dǎo)航條代碼

    關(guān)于Blog頂部的滾動(dòng)導(dǎo)航條代碼...
    2006-09-09
  • JavaScript中Promise的簡(jiǎn)單使用及其原理詳解

    JavaScript中Promise的簡(jiǎn)單使用及其原理詳解

    Promise是ES6最重要的特性之一,今天小編就來(lái)帶大家一起系統(tǒng)且細(xì)致的研究一下Promise的用法以及原理,感興趣的小伙伴可以學(xué)習(xí)一下哦
    2023-03-03
  • js數(shù)組案例之五子棋游戲

    js數(shù)組案例之五子棋游戲

    這篇文章主要為大家詳細(xì)介紹了js數(shù)組案例之五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • webpack-url-loader 解決項(xiàng)目中圖片打包路徑問(wèn)題

    webpack-url-loader 解決項(xiàng)目中圖片打包路徑問(wèn)題

    這篇文章主要介紹了webpack-url-loader 解決項(xiàng)目中圖片打包路徑問(wèn)題,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • echarts柱狀圖坐標(biāo)軸內(nèi)容顯示不全的兩種解決辦法

    echarts柱狀圖坐標(biāo)軸內(nèi)容顯示不全的兩種解決辦法

    本文主要介紹了echarts柱狀圖坐標(biāo)軸內(nèi)容顯示不全的兩種解決辦法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • JavaScript必知必會(huì)(五) eval 的使用

    JavaScript必知必會(huì)(五) eval 的使用

    這篇文章主要介紹了JavaScript必知必會(huì)(五) eval 的使用 的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-06-06
  • 詳解JS內(nèi)存空間

    詳解JS內(nèi)存空間

    因?yàn)镴avaScript具有自動(dòng)垃圾回收機(jī)制,所以對(duì)于前端開(kāi)發(fā)來(lái)說(shuō),內(nèi)存空間并不是一個(gè)經(jīng)常被提及的概念。特別是很多不是計(jì)算機(jī)專業(yè)的朋友在進(jìn)入到前端之后,會(huì)對(duì)內(nèi)存空間的認(rèn)知比較模糊,甚至有些人干脆就是一無(wú)所知。為了解決大家的疑惑,本文將詳細(xì)介紹JS內(nèi)存空間
    2021-06-06
  • JS實(shí)現(xiàn)給json數(shù)組動(dòng)態(tài)賦值的方法示例

    JS實(shí)現(xiàn)給json數(shù)組動(dòng)態(tài)賦值的方法示例

    這篇文章主要介紹了JS實(shí)現(xiàn)給json數(shù)組動(dòng)態(tài)賦值的方法,結(jié)合實(shí)例形式分析了javascript針對(duì)json數(shù)組的遍歷、賦值等常用操作技巧,需要的朋友可以參考下
    2017-07-07
  • js實(shí)現(xiàn)登錄注冊(cè)框手機(jī)號(hào)和驗(yàn)證碼校驗(yàn)(前端部分)

    js實(shí)現(xiàn)登錄注冊(cè)框手機(jī)號(hào)和驗(yàn)證碼校驗(yàn)(前端部分)

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)登錄注冊(cè)框手機(jī)號(hào)和驗(yàn)證碼校驗(yàn)的前端部分代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09

最新評(píng)論