javascript设计模式 ? 代理模式原理与用法实例分析


Posted in Javascript onApril 16, 2020

本文实例讲述了javascript设计模式 ? 代理模式原理与用法。分享给大家供大家参考,具体如下:

介绍:代理使我们很常见的一众模式,proxy,nginx都称之为代理,代理是什么意思呢?代理模式在客户端和目标对象之间加入一个新的代理对象,代理对象起到一个中介作用,去掉客户不能看到的内容和服务,或者增添客户需要的额外服务。

定义:给某一个对象提供一个代理,并由代理对象控制对原对象的引用。代理模式是一种对象结构型模式。

场景:我们还是以画图形为例,我将所有的绘图动作包装到Shape类中,使用代理模式来部分开放功能给客户。

示例:

var Shape = function(color){
  console.log('创建了一个对象');
  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();
// 创建了一个对象
// 画方: 颜色:red x:10 y:10
// 画方: 颜色:red x:10 y:10

你可以在proxyShape中增加一些日志,权限等任务。因为代理类的存在,新增的任务不会影响到Shape类。

代理模式为对象的简介访问提供了解决方案,可以对对象的访问进行控制。

代理模式总结:

优点:
* 代理模式可以协调调用者和被调用这,一定程度降低了系统耦合度。

缺点:
* 由于增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。
* 实现代理模式需要额外的工作,有些代理模式的实现非常复杂。

适用场景:
* 当客户端需要访问远程主机中的对象时,可以使用远程代理。
* 当需要用一个消耗资源较少的对象来代表资源消耗较多的对象,可以使用虚拟代理
* 当需要控制一个对象的访问,为不同用户提供不同级别的访问权限时可以使用保护代理

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
兼容IE和Firefox的javascript获取iframe文档内容的函数
Aug 15 Javascript
js中符号转意问题示例探讨
Aug 19 Javascript
js控制frameSet示例
Sep 10 Javascript
sogou地图API用法实例教程
Sep 11 Javascript
JavaScript学习笔记之内置对象
Jan 22 Javascript
jQuery mobile类库使用时加载导航历史的方法简介
Dec 04 Javascript
谈谈JavaScript中的几种借用方法
Aug 09 Javascript
Vue瀑布流插件的使用示例
Sep 19 Javascript
详解JSON和JSONP劫持以及解决方法
Mar 08 Javascript
JavaScript布尔运算符原理使用解析
May 06 Javascript
JavaScript设计模式--桥梁模式引入操作实例分析
May 23 Javascript
Jquery+javascript实现支付网页数字键盘
Dec 21 jQuery
js String.prototype.trim字符去前后空格的扩展
Aug 23 #Javascript
Vue Object 的变化侦测实现代码
Apr 15 #Javascript
Vue项目vscode 安装eslint插件的方法(代码自动修复)
Apr 15 #Javascript
小程序按钮避免多次调用接口和点击方案实现(不用showLoading)
Apr 15 #Javascript
javascript设计模式 ? 享元模式原理与用法实例分析
Apr 15 #Javascript
javascript设计模式 ? 外观模式原理与用法实例分析
Apr 15 #Javascript
写给新手同学的vuex快速上手指北小结
Apr 14 #Javascript
You might like
PHP中Cookie的使用详解(简单易懂)
2017/04/28 PHP
PHP5中使用mysqli的prepare操作数据库的介绍
2019/03/18 PHP
再说AutoComplete自动补全之实现原理
2011/11/05 Javascript
Jquery写一个鼠标拖动效果实现原理与代码
2012/12/24 Javascript
深入解析JavaScript编程中的this关键字使用
2015/11/09 Javascript
javascript实现简易计算器的代码
2016/05/31 Javascript
深入浅析JavaScript中的arguments对象(强力推荐)
2016/06/03 Javascript
避免jQuery名字冲突 noConflict()方法
2016/07/30 Javascript
node.js实现快速截图
2016/08/27 Javascript
React Router V4使用指南(精讲)
2018/09/17 Javascript
详解vue-router数据加载与缓存使用总结
2018/10/29 Javascript
浅谈vue后台管理系统权限控制思考与实践
2018/12/19 Javascript
JS+canvas画布实现炫酷的旋转星空效果示例
2019/02/13 Javascript
nodejs中使用archive压缩文件的实现代码
2019/11/26 NodeJs
vue中对象数组去重的实现
2020/02/06 Javascript
JS实现简易贪吃蛇游戏
2020/08/24 Javascript
详解Python编程中基本的数学计算使用
2016/02/04 Python
TensorFlow实现MLP多层感知机模型
2018/03/09 Python
python生成密码字典的方法
2018/07/06 Python
pycharm 解除默认unittest模式的方法
2018/11/30 Python
详解python解压压缩包的五种方法
2019/07/05 Python
python 图片去噪的方法示例
2019/07/09 Python
Django项目主urls导入应用中views的红线问题解决
2019/08/10 Python
Python编写打字训练小程序
2019/09/26 Python
关于初始种子自动选取的区域生长实例(python+opencv)
2020/01/16 Python
利用CSS3的flexbox实现水平垂直居中与三列等高布局
2016/09/12 HTML / CSS
AmazeUI 平滑滚动效果的示例代码
2020/08/20 HTML / CSS
美国性感内衣店:Yandy
2018/06/12 全球购物
Fanatics英国官网:美国体育电商
2018/11/06 全球购物
家得宝官网:The Home Depot(全球最大的家居装饰专业零售商)
2018/12/17 全球购物
美术专业学生个人自我评价
2013/09/19 职场文书
关爱残疾人演讲稿
2014/05/24 职场文书
精神病医院见习报告
2014/11/03 职场文书
2016年第16个全民国防教育日宣传活动总结
2016/04/05 职场文书
遇事可以测出您的见识与格局
2019/09/16 职场文书
SQL Server基本使用和简单的CRUD操作
2021/04/05 SQL Server