JavaScript设计模式之代理模式简单实例教程


Posted in Javascript onJuly 03, 2018

本文实例讲述了JavaScript设计模式之代理模式。分享给大家供大家参考,具体如下:

一、代理模式概念

代理,顾名思义就是帮助别人做事,GoF对代理模式的定义如下:

代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。代理模式使得代理对象控制具体对象的引用。代理几乎可以是任何对象:文件,资源,内存中的对象,或者是一些难以复制的东西。

解释:房屋中介,可以代理帮助卖家把房子卖给买家,这中间卖家说要卖的价钱就可以了,买家也可以提出自己要买的房型,中介可以帮忙处理中间环节。最后达成买卖。中介可以同时代理很多房屋买卖,并且可以代理租房事宜。

代理模式的组成:

抽象角色:通过接口或抽象类声明真实角色实现的业务方法。

代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。

真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。

二、代理模式的作用和注意事项

模式作用:

1、远程代理(一个对象将不同空间的对象进行局部代理)

2、虚拟代理(根据需要创建开销很大的对象如渲染网页暂时用占位代替真图)

3、安全代理(控制证实对象的访问权限)

4、智能指引(调用对象代理处理另外一些事情如垃圾回收机制)

注意事项:

1、不能滥用代理,有时候仅仅是给代码增加复杂度

三、代理模式代码和实战总结

<!DOCTYPE html>
<html>
<head lang="en">
 <meta charset="UTF-8">
 <title>代理模式</title>
</head>
<body>
<script>
 //代理模式需要三方
 //1.买家
 function maijia(){
  this.name = "小明";
  this.money = "30万";
 }
 //2.中介
 function zhongjie(){
 }
 zhongjie.prototype.maifang = function(){
  //new fongdong(new maijia()).maifang("20万");
  new fongdong(new maijia()).maifang("20万");
 }
 //3.卖家
 function fongdong(maijia){
  this.maijia_name = maijia.name;
  this.maijia_money = maijia.money;
  this.maifang = function(money){
//   console.log("收到了来自【"+this.maijia_name+"】"+money+"人民币");
   console.log("收到了来自【"+this.maijia_name+"】"+this.maijia_money+"人民币");
  }
 }
 (new zhongjie()).maifang();
</script>
<script>
// A2B
 function A(){
  this.money = "20RMB";
 }
 function to(){
  if(!(this instanceof to)){
   return new to;
  }
 }
 to.prototype.maifang = function(){
  var a = new A();
  new B().maifang(a.money);
 }
 function B(){
  this.maifang = function(money){
   console.log("收到了钱"+money);
  }
 }
 (new to()).maifang();
 to().maifang();
</script>
</body>
</html>

使用在线HTML/CSS/JavaScript代码运行工具 http://tools.3water.com/code/HtmlJsRun测试运行效果如下:

JavaScript设计模式之代理模式简单实例教程

更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

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

Javascript 相关文章推荐
js跨域和ajax 跨域问题的实现思路
Sep 05 Javascript
js为鼠标添加右击事件防止默认的右击菜单弹出
Jul 29 Javascript
用js来刷新当前页面保留参数的具体实现
Dec 23 Javascript
jquery如何判断表格同一列不同行input数据是否重复
May 14 Javascript
JS解析XML实例分析
Jan 30 Javascript
js带缩略图的图片轮播效果代码分享
Sep 14 Javascript
JSONP跨域请求实例详解
Jul 04 Javascript
jQuery制作网页版选项卡
Jul 28 Javascript
基于vue实现分页/翻页组件paginator示例
Mar 09 Javascript
基于vue.js路由参数的实例讲解——简单易懂
Sep 07 Javascript
从setTimeout看js函数执行过程
Dec 19 Javascript
JS控制GIF图片的停止与显示
Oct 24 Javascript
详解Vue中使用Echarts的两种方式
Jul 03 #Javascript
vue awesome swiper异步加载数据出现的bug问题
Jul 03 #Javascript
JavaScript设计模式之工厂模式简单实例教程
Jul 03 #Javascript
js实现各浏览器全屏代码实例
Jul 03 #Javascript
React Native基础入门之初步使用Flexbox布局
Jul 02 #Javascript
JavaScript设计模式之构造函数模式实例教程
Jul 02 #Javascript
vue-router 源码实现前端路由的两种方式
Jul 02 #Javascript
You might like
php环境配置 php5 mysql5 apache2 phpmyadmin安装与配置
2006/11/17 PHP
TMDPHP 模板引擎使用教程
2012/03/13 PHP
PHP与MongoDB简介|安全|M+PHP应用实例详解
2013/06/17 PHP
PHP两种去掉数组重复值的方法比较
2014/06/19 PHP
跨浏览器PHP下载文件名中的中文乱码问题解决方法
2015/03/05 PHP
PHP判断一个数组是另一个数组子集的方法详解
2017/07/31 PHP
关于可运行代码无法正常执行的使用说明
2010/05/13 Javascript
jQuery timers计时器简单应用说明
2010/10/28 Javascript
拖动table标题实现改变td的大小(css+js代码)
2013/04/16 Javascript
判断一个变量是数组Array类型的方法
2013/09/16 Javascript
jquery中post方法用法实例
2014/10/21 Javascript
js创建jsonArray传输至后台及后台全面解析
2016/04/11 Javascript
ionic cordova一次上传多张图片(类似input file提交表单)的实现方法
2016/12/16 Javascript
浅析node.js的模块加载机制
2018/05/25 Javascript
详解Vue 匿名、具名和作用域插槽的使用方法
2019/04/22 Javascript
jQuery zTree插件使用简单教程
2019/08/16 jQuery
vue使用过滤器格式化日期
2021/01/20 Vue.js
Python 文件操作实现代码
2009/10/07 Python
Python SQLite3数据库操作类分享
2014/06/10 Python
python实现端口转发器的方法
2015/03/13 Python
Python实现FTP上传文件或文件夹实例(递归)
2017/01/16 Python
Python实现PS滤镜的万花筒效果示例
2018/01/23 Python
Python多线程扫描端口代码示例
2018/02/09 Python
详解Python下ftp上传文件linux服务器
2018/06/21 Python
解决Python中定时任务线程无法自动退出的问题
2019/02/18 Python
python redis连接 有序集合去重的代码
2019/08/04 Python
在matplotlib中改变figure的布局和大小实例
2020/04/23 Python
个性化皮包、小袋、生活配件:Mon Purse
2019/03/26 全球购物
英国在线滑雪板和冲浪商店:The Board Basement
2020/01/11 全球购物
linux面试题参考答案(7)
2012/10/29 面试题
办公室经理岗位职责
2014/01/01 职场文书
集团薪酬管理制度
2014/01/13 职场文书
小学家长会邀请函
2014/01/23 职场文书
企业出纳岗位职责
2014/03/12 职场文书
2014年加油站站长工作总结
2014/12/23 职场文书
win11自动弹出虚拟键盘怎么关闭? Win11关闭虚拟键盘的技巧
2023/01/09 数码科技