代理模式的定义是把对一个对象的访问, 交给另一个代理对象来操作.

举一个例子, 我在追一个MM想给她送一束花,但是我因为我性格比较腼腆,所以我托付了MM的一个好朋友来送。

这个例子不是非常好, 至少我们没看出代理模式有什么大的用处,因为追MM更好的方式是送一台宝马。

再举个例子,假如我每天都得写工作日报( 其实没有这么惨 ). 我的日报最后会让总监审阅. 如果我们都直接把日报发给 总监 , 那可能 总监 就没法工作了. 所以通常的做法是把日报发给我的组长 , 组长把所有组员一周的日报都汇总后再发给总监 .

实际的编程中, 这种因为性能问题使用代理模式的机会是非常多的。比如频繁的访问dom节点, 频繁的请求远程资源. 可以把操作先存到一个缓冲区, 然后自己选择真正的触发时机.

再来个详细的例子,之前我写了一个街头霸王的游戏, 地址

于是我写了一个keyManage类. 其中在游戏主线程里监听keyManage的变化.

var keyMgr = keyManage();
keyMgr.listen( ''change', function( keyCode ){
console.log( keyCode );
});

图片里面隆正在放升龙拳, 升龙拳的操作是前下前+拳. 但是这个keyManage类只要发生键盘事件就会触发之前监听的change函数. 这意味着永远只能取得前,后,前,拳这样单独的按键事件,而无法得到一个按键组合。

好吧,我决定改写我的keyManage类, 让它也支持传递按键组合. 但是如果我以后写个html5版双截龙,意味着我每次都得改写keyManage. 我总是觉得, 这种函数应该可以抽象成一个更底层的方法, 让任何游戏都可以用上它.

所以最后的keyManage只负责映射键盘事件. 而隆接受到的动作是通过一个代理对象处理之后的.

var keyMgr = keyManage();
keyMgr.listen( ''change', proxy( function( keyCode ){
console.log( keyCode ); //前下前+拳
)} );

至于proxy里面怎么实现,完全可以自由发挥。

还有个例子就是在调用ajax请求的时候,无论是各种开源库,还是自己写的Ajax类, 都会给xhr对象设置一个代理. 我们不可能频繁的去操作xhr对象发请求, 而应该是这样.

var request = Ajax.get( 'cgi.xx.com/xxx' );
request.send();
request.done(function(){
});

最新文章

  1. Genymotion 解决虚拟镜像下载速度特别慢的问题
  2. Uncaught TypeError: _react2.default.findDOMNode is not a function
  3. ADB server didn't ACK 解决方法
  4. BZOJ-3130 费用流 (听题目胡扯丶裸最大流) 二分判定+最大流+实数精度乱搞
  5. Easyui主要组件用法
  6. 一种JavaScript 类的设计模式
  7. SQL-Duplicate Emails
  8. js跳转页面代码用法
  9. Examining the Rooms(dp,斯特灵数)
  10. Java中的WebService服务
  11. 关于jQuery插件imgAreaSelect基础讲解
  12. Wiser的Junit测试用法
  13. Spring与Quartz的整合实现定时任务调度(转)
  14. LeetCode 59. Spiral Matrix II (螺旋矩阵之二)
  15. 【Python】 汉字转化汉语拼音pinyin
  16. Linux命令之常用篇
  17. Linux常见系统故障
  18. selenium中,8种 find element 方法
  19. jquery九大选择器的用法举例
  20. 吴恩达-coursera-机器学习-week2

热门文章

  1. 以太坊系列之十一: 零起步使用remix开发智能合约
  2. 「HNOI2008」越狱
  3. Python数据聚合和分组运算(1)-GroupBy Mechanics
  4. php 中 include 与 require 的区别
  5. rest_framwork中ApiView实现分页
  6. winform跨线程问题(有参数和无参数)
  7. 50行代码实现python计算器主要功能
  8. charles破解激活方法,注册码
  9. php 页面压缩---
  10. 浅谈C#数组(一)