Aop 又叫面向切面编程,用过 spring 的同学肯定对它非常熟悉,而在 js 中,AOP 是一个被严重忽视的技术点,这篇就通过下面这几个小例子,来说说 AOP 在 js 中的妙用.
1, 防止 window.onload 被二次覆盖.
2,无侵入的统计代码.
3, 分离表单请求和校验.
4,给 ajax 请求动态添加参数.
5,职责链模式.
6, 组合代替继承.
《parctical common lisp》的作者曾说,如果你需要一种模式,那一定是哪里出了问题。他所说的问题是指因为语言的天生缺陷,不得不去寻求和总结一种通用的解决方案。
不管是弱类型或强类型,静态或动态语言,命令式或说明式语言、每种语言都有天生的优缺点。一个牙买加运动员, 在短跑甚至拳击方面有一些优势,在练瑜伽上就欠缺一些。
享元模式主要用来减少程序所需的对象个数. 有一个例子, 我们这边的前端同学几乎人手一本《javascript 权威指南》. 从省钱的角度讲, 大约三本就够了. 放在部门的书柜里, 谁需要看的时候就去拿, 看完了还回去. 如果同时有 4 个同学需要看, 此时再去多买一本.
在 webqq 里面, 打开 QQ 好友列表往下拉的时候,会为每个好友创建一个 div( 如果算上 div 中的子节点, 还远不只 1 个元素 ).
职责链模式是一个对象 A 向另一个对象 B 发起请求,如果 B 不处理,可以把请求转给 C,如果 C 不处理,又可以把请求转给 D。一直到有一个对象愿意处理这个请求为止。
打个比方,客户让老板写个 php 程序。老板肯定不写,然后老板交给了部门经理。部门经理不愿意写,又交给项目经理。项目经理不会写,又交给程序员。最后由码农来完成。
备忘录模式在 js 中经常用于数据缓存. 比如一个分页控件, 从服务器获得某一页的数据后可以存入缓存。以后再翻回这一页的时候,可以直接使用缓存里的数据而无需再次请求服务器。
实现比较简单,伪代码:
组合模式又叫部分-整体模式,它将所有对象组合成树形结构。使得用户只需要操作最上层的接口,就可以对所有成员做相同的操作。
一个再好不过的例子就是 jquery 对象,大家都知道 1 个 jquery 对象其实是一组对象集合。比如在这样一个 HTML 页面
1 2 3 4 5 6 |
<body> <div> <span></span> <span></span> </div> </body> |
迭代器模式提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该方法中的内部表示。
js 中我们经常会封装一个 each 函数用来实现迭代器。
array 的迭代器:
Copyright © 2011-2021 AlloyTeam. All Rights Reserved. Powered By WordPress
粤ICP备15071938号-2