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 相关文章推荐
用javascript动态调整iframe高度的代码
Apr 10 Javascript
JavaScript入门学习书籍推荐
Jun 12 Javascript
关闭浏览器窗口弹出提示框并且可以控制其失效
Apr 15 Javascript
全面了解javascript中的错误处理机制
Jul 18 Javascript
BootStrap Table 分页后重新搜索问题的解决办法
Aug 08 Javascript
JavaScript DOM节点操作实例小结(新建,删除HTML元素)
Jan 19 Javascript
jquery.guide.js新版上线操作向导镂空提示jQuery插件(推荐)
May 20 jQuery
JavaScript原型继承_动力节点Java学院整理
Jun 30 Javascript
jQuery实现节点的追加、替换、删除、复制功能示例
Jul 11 jQuery
基于jQuery解决ios10以上版本缩放问题
Nov 03 jQuery
详解express + mock让前后台并行开发
Jun 06 Javascript
React实现类似淘宝tab居中切换效果的示例代码
Jun 02 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 身份验证方面的函数
2009/10/11 PHP
php提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
2011/02/08 PHP
Yii2使用$this->context获取当前的Module、Controller(控制器)、Action等
2017/03/29 PHP
PHP实现网页内容html标签补全和过滤的方法小结【2种方法】
2017/04/27 PHP
Js 弹出框口并返回值的两种常用方法
2010/12/30 Javascript
基于jQuery实现图片的前进与后退功能
2013/04/24 Javascript
在线一元二次方程计算器实例(方程计算器在线计算)
2013/12/22 Javascript
Node.js巧妙实现Web应用代码热更新
2015/10/22 Javascript
给angular加上动画效遇到的问题总结
2016/02/17 Javascript
Bootstrap轮播插件简单使用方法介绍
2016/06/21 Javascript
jQuery基本过滤选择器用法示例
2016/09/09 Javascript
js 能实现监听F5页面刷新子iframe 而父页面不刷新的方法
2016/11/09 Javascript
windows下vue-cli及webpack搭建安装环境
2017/04/25 Javascript
详解JS数值Number类型
2018/02/07 Javascript
vue使用xe-utils函数库的具体方法
2018/03/06 Javascript
JavaScript实现邮箱后缀提示功能的示例代码
2018/12/13 Javascript
[57:50]DOTA2上海特级锦标赛主赛事日 - 4 胜者组决赛Secret VS Liquid第二局
2016/03/05 DOTA
python写xml文件的操作实例
2014/10/05 Python
使用Python脚本和ADB命令实现卸载App
2017/02/10 Python
朴素贝叶斯Python实例及解析
2018/11/19 Python
python selenium爬取斗鱼所有直播房间信息过程详解
2019/08/09 Python
matlab中二维插值函数interp2的使用详解
2020/04/22 Python
python脚本和网页有何区别
2020/07/02 Python
通过Canvas及File API缩放并上传图片完整示例
2013/08/08 HTML / CSS
html5中嵌入视频自动播放的问题解决
2020/05/25 HTML / CSS
澳大利亚在线购买葡萄酒:The Wine Collective
2020/02/20 全球购物
什么是makefile? 如何编写makefile?
2012/08/08 面试题
广告设计专业自荐信范文
2013/11/14 职场文书
社团2014年植树节活动总结
2014/03/11 职场文书
作风大整顿心得体会
2014/09/10 职场文书
2014领导班子“四风问题”对照检查材料思想汇报(执法局)
2014/09/21 职场文书
导游欢迎词范文
2015/01/23 职场文书
我的中国梦心得体会范文
2016/01/05 职场文书
年中了,该如何写好个人述职报告?
2019/07/02 职场文书
使用python+pygame开发消消乐游戏附完整源码
2021/06/10 Python
Python爬虫框架之Scrapy中Spider的用法
2021/06/28 Python