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 相关文章推荐
JQ获取动态加载的图片大小的正确方法分享
Nov 08 Javascript
JavaScript排序算法之希尔排序的2个实例
Apr 04 Javascript
DOM基础教程之事件对象
Jan 20 Javascript
bootstrap实现弹窗和拖动效果
Jan 03 Javascript
jQuery子元素过滤选择器用法示例
Sep 09 Javascript
基于jQuery解决ios10以上版本缩放问题
Nov 03 jQuery
vue中本地静态图片路径写法
Mar 06 Javascript
vue2实现搜索结果中的搜索关键字高亮的代码
Aug 29 Javascript
使用layui+ajax实现简单的菜单权限管理及排序的方法
Sep 10 Javascript
iview form清除校验状态的实现
Sep 19 Javascript
解决layui动态加载复选框无法选中的问题
Sep 20 Javascript
vue使用require.context实现动态注册路由
Dec 25 Vue.js
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
国内咖啡文化
2021/03/03 咖啡文化
聊天室php&mysql(二)
2006/10/09 PHP
PHP5中的this,self和parent关键字详解教程
2007/03/19 PHP
PHP 变量的定义方法
2010/01/26 PHP
PHP 杂谈《重构-改善既有代码的设计》之五 简化函数调用
2012/05/07 PHP
PHP的异常处理类Exception的使用及说明
2012/06/13 PHP
php找出指定范围内回文数且平方根也是回文数的方法
2015/03/23 PHP
php curl中gzip的压缩性能测试实例分析
2016/11/08 PHP
Laravel使用swoole实现websocket主动消息推送的方法介绍
2019/10/20 PHP
php pdo连接数据库操作示例
2019/11/18 PHP
javascript 获取url参数和script标签中获取url参数函数代码
2010/01/22 Javascript
setTimeout和setInterval的深入理解
2013/11/08 Javascript
jquery使用jxl插件导出excel示例
2014/04/14 Javascript
js实现二代身份证号码验证详解
2014/11/20 Javascript
Jquery1.9.1源码分析系列(六)延时对象应用之jQuery.ready
2015/11/24 Javascript
Javascrip实现文字跳动特效
2016/11/27 Javascript
Nodejs多站点切换Htpps协议详解及简单实例
2017/02/23 NodeJs
node.js 中间件express-session使用详解
2017/05/20 Javascript
three.js中文文档学习之如何本地运行详解
2017/11/20 Javascript
搭建vue开发环境
2018/07/19 Javascript
[35:44]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG
2014/05/26 DOTA
[02:57]DOTA2亚洲邀请赛 SECRET战队出场宣传片
2015/02/07 DOTA
用Python实现服务器中只重载被修改的进程的方法
2015/04/30 Python
CentOS安装pillow报错的解决方法
2016/01/27 Python
基于python进行桶排序与基数排序的总结
2018/05/29 Python
Python实现随机漫步功能
2018/07/09 Python
Python基本数据结构与用法详解【列表、元组、集合、字典】
2019/03/23 Python
对tensorflow中的strides参数使用详解
2020/01/04 Python
Python脚本实现监听服务器的思路代码详解
2020/05/28 Python
Python如何实现远程方法调用
2020/08/07 Python
美国著名的婴儿学步鞋老品牌:Robeez
2016/08/20 全球购物
金宝贝童装官网:Gymboree
2016/08/31 全球购物
国际贸易专业个人鉴定
2014/02/22 职场文书
工伤赔偿协议书范本
2014/04/15 职场文书
道德之星事迹材料
2014/05/03 职场文书
Oracle 临时表空间SQL语句的实现
2021/09/25 Oracle