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 相关文章推荐
找到了一篇jQuery与Prototype并存的冲突的解决方法
Aug 29 Javascript
项目实践之javascript技巧
Dec 06 Javascript
JavaScript的漂亮的代码片段
Jun 05 Javascript
谷歌地图打不开的解决办法
Aug 07 Javascript
JavaScript导出Excel实例详解
Nov 25 Javascript
jquery 根据name名获取元素的value值
Feb 27 Javascript
基于JavaScript实现活动倒计时效果
Apr 20 Javascript
JavaScript生成图形验证码
Aug 24 Javascript
基于JavaScript实现新增内容滚动播放效果附完整代码
Aug 24 Javascript
小程序getLocation需要在app.json中声明permission字段
Apr 04 Javascript
微信公众号平台接口开发 获取微信服务器IP地址方法解析
Aug 14 Javascript
vue 使用element-ui中的Notification自定义按钮并实现关闭功能及如何处理多个通知
Aug 17 Javascript
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+SqlServer实现分页显示
2006/10/09 PHP
神盾加密解密教程(二)PHP 神盾解密
2014/06/08 PHP
详解PHP导入导出CSV文件
2014/11/03 PHP
PHP中常用的数组操作方法笔记整理
2016/05/16 PHP
HR vs ForZe BO3 第二场 2.13
2021/03/10 DOTA
深入理解JavaScript系列(7) S.O.L.I.D五大原则之开闭原则OCP
2012/01/15 Javascript
jQuery选择器全面总结
2014/01/06 Javascript
js实现日期级联效果
2014/01/23 Javascript
初识Node.js
2015/03/20 Javascript
JS实现点击按钮后框架内载入不同网页的方法
2015/05/05 Javascript
AngularJS实现全选反选功能
2015/12/08 Javascript
jQuery hover事件简单实现同时绑定2个方法
2016/06/07 Javascript
javascript实现抽奖程序的简单实例
2016/06/07 Javascript
angularjs 表单密码验证自定义指令实现代码
2016/10/27 Javascript
jQuery中table数据的值拷贝和拆分
2017/03/19 Javascript
AngularJS入门教程二:在路由中传递参数的方法分析
2017/05/27 Javascript
详解wow.js中各种特效对应的类名
2017/09/13 Javascript
jQuery简单判断值是否存在于数组中的方法示例
2018/04/17 jQuery
浅谈Webpack核心模块tapable解析
2018/09/11 Javascript
如何为vuex实现带参数的 getter和state.commit
2019/01/04 Javascript
多个Vue项目部署到服务器的步骤记录
2020/10/22 Javascript
Ant Design Vue table中列超长显示...并加提示语的实例
2020/10/31 Javascript
[01:47]2018年度DOTA2最具人气解说-完美盛典
2018/12/16 DOTA
Python输出PowerPoint(ppt)文件中全部文字信息的方法
2015/04/28 Python
Python获取当前页面内所有链接的四种方法对比分析
2017/08/19 Python
浅析PEP572: 海象运算符
2019/10/15 Python
Python实现快速排序的方法详解
2019/10/25 Python
python GUI库图形界面开发之PyQt5滚动条控件QScrollBar详细使用方法与实例
2020/03/06 Python
html5手机键盘弹出收起的处理
2020/01/20 HTML / CSS
美国电力供应商店/电气批发商:USESI
2018/10/12 全球购物
Interhome丹麦:在线预订度假屋和公寓
2019/07/18 全球购物
有趣、实用和鼓舞人心的产品:Inspire Uplift
2019/11/05 全球购物
线程的基本概念、线程的基本状态以及状态之间的关系
2012/10/26 面试题
法律专业实习鉴定
2013/12/22 职场文书
开门红主持词
2014/04/02 职场文书
大学拉赞助协议书范文
2014/09/26 职场文书