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 相关文章推荐
超清晰的document对象详解
Feb 27 Javascript
Aptana调试javascript图解教程
Nov 30 Javascript
JQuery 写的个性导航菜单
Dec 24 Javascript
Firefox和IE兼容性问题及解决方法总结
Oct 08 Javascript
jquery选择器之内容过滤选择器详解
Jan 27 Javascript
js读取配置文件自写
Feb 11 Javascript
jQuery实现鼠标双击Table单元格变成文本框及输入内容后更新到数据库的方法
Nov 25 Javascript
微信小程序 中wx.chooseAddress(OBJECT)实例详解
Mar 31 Javascript
Vue.js 十五分钟入门图文教程
Sep 12 Javascript
JS把字符串格式的时间转换成几秒前、几分钟前、几小时前、几天前等格式
Jul 10 Javascript
原生js+ajax分页组件
Jan 30 Javascript
原生js拖拽实现图形伸缩效果
Feb 10 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
《OVERLORD》手游英文版即将上线 手机上也能扮演骨王
2020/04/09 日漫
PHP脚本的10个技巧(7)
2006/10/09 PHP
ThinkPHP模板自定义标签使用方法
2014/06/26 PHP
详解PHP中的mb_detect_encoding函数使用方法
2015/08/18 PHP
WordPress主题中添加文章列表页页码导航的PHP代码实例
2015/12/22 PHP
php自定义函数实现JS的escape的方法示例
2016/07/07 PHP
PHP 将dataurl转成图片image方法总结
2016/10/14 PHP
web前端开发JQuery常用实例代码片段(50个)
2015/08/28 Javascript
JS+CSS实现电子商务网站导航模板效果代码
2015/09/10 Javascript
原生js获取元素样式的简单方法
2016/08/06 Javascript
jQuery实现简单漂亮的Nav导航菜单效果
2017/03/29 jQuery
vue cli使用绝对路径引用图片问题的解决
2017/12/06 Javascript
js实现网页同时进行多个倒计时功能
2019/02/25 Javascript
JavaScript实现PC端四格密码输入框功能
2020/02/19 Javascript
JS+Canvas实现五子棋游戏
2020/08/26 Javascript
[34:56]Ti4冒泡赛LGD vs Liquid 1
2014/07/14 DOTA
Python高斯消除矩阵
2019/01/02 Python
Python实现查找二叉搜索树第k大的节点功能示例
2019/01/24 Python
24式加速你的Python(小结)
2019/06/13 Python
pytz格式化北京时间多出6分钟问题的解决方法
2019/06/21 Python
Python实现决策树并且使用Graphviz可视化的例子
2019/08/09 Python
pyqt5 QlistView列表显示的实现示例
2020/03/24 Python
golang/python实现归并排序实例代码
2020/08/30 Python
HTML5仿手机微信聊天界面
2016/03/18 HTML / CSS
HTML5本地存储localStorage、sessionStorage基本用法、遍历操作、异常处理等
2014/05/08 HTML / CSS
美国孕妇装品牌:Destination Maternity
2018/02/04 全球购物
北京捷通华声语音技术有限公司Java软件工程师笔试题
2012/04/10 面试题
中专生自我鉴定
2013/12/17 职场文书
2014年法院个人工作总结
2014/12/17 职场文书
拾金不昧表扬稿
2015/01/16 职场文书
限期整改通知书
2015/04/22 职场文书
小学音乐课教学反思
2016/02/18 职场文书
使用HTML+Css+transform实现3D导航栏的示例代码
2021/03/31 HTML / CSS
golang协程池模拟实现群发邮件功能
2021/05/02 Golang
Java实现经典游戏泡泡堂的示例代码
2022/04/04 Java/Android
Apache自带的ab压力测试工具的实现
2022/07/23 Servers