TAT.svenzeng 【Javascript 设计模式 13】-组合模式
In 未分类 on 2012年10月24日 by view: 10,784
7

组合模式又叫部分-整体模式,它将所有对象组合成树形结构。使得用户只需要操作最上层的接口,就可以对所有成员做相同的操作。
一个再好不过的例子就是 jquery 对象,大家都知道 1 个 jquery 对象其实是一组对象集合。比如在这样一个 HTML 页面

TAT.svenzeng 【Javascript 设计模式 12】-迭代器模式
In 未分类 on 2012年10月24日 by view: 9,623
8

迭代器模式提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该方法中的内部表示。
js 中我们经常会封装一个 each 函数用来实现迭代器。
array 的迭代器:

TAT.svenzeng 【Javascript 设计模式 11】-中介者模式
In 未分类 on 2012年10月24日 by view: 12,703
11

中介者对象可以让各个对象之间不需要显示的相互引用,从而使其耦合松散,而且可以独立的改变它们之间的交互。

打个比方,军火买卖双方为了安全起见,找了一个信任的中介来进行交易。买家 A 把钱交给中介 B,然后从中介手中得到军火,卖家 C 把军火卖给中介,然后从中介手中拿回钱。一场交易完毕,A 甚至不知道 C 是一只猴子还是一只猛犸。因为中介的存在,A 也未必一定要买 C 的军火,也可能是 D,E,F。

TAT.svenzeng 【Javascript 设计模式 10】-模版方法模式
In 未分类 on 2012年10月24日 by view: 8,295
7

模式方法是预先定义一组算法,先把算法的不变部分抽象到父类,再将另外一些可变的步骤延迟到子类去实现。听起来有点像工厂模式 ( 非前面说过的简单工厂模式 ).
最大的区别是, 工厂模式的意图是根据子类的实现最终获得一种对象. 而模版方法模式着重于父类对子类的控制.

TAT.svenzeng 【Javascript 设计模式 9】-策略模式
In 未分类 on 2012年10月24日 by view: 14,812
12

策略模式的意义是定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。
一个小例子就能让我们一目了然。
回忆下 jquery 里的 animate 方法.

TAT.svenzeng 【Javascript 设计模式 8】-访问者模式
In 未分类 on 2012年10月24日 by view: 11,470
9

待续。。

TAT.svenzeng 【Javascript 设计模式 7】-外观模式
In 未分类 on 2012年10月24日 by view: 11,425
10

外观模式 (门面模式),是一种相对简单而又无处不在的模式。外观模式提供一个高层接口,这个接口使得客户端或子系统更加方便调用。
用一段再简单不过的代码来表示

TAT.svenzeng 【Javascript 设计模式 6】-桥接模式
In 未分类 on 2012年10月24日 by view: 10,980
10

待续。。

TAT.svenzeng 【Javascript 设计模式 5】-代理模式
In 未分类 on 2012年10月24日 by view: 14,596
10

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

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

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

TAT.svenzeng 【Javascript 设计模式 4】- 适配器模式
In 未分类 on 2012年10月24日 by view: 11,958
6

去年年前当时正在开发 dev.qplus.com, 有个存储应用分类 id 的 js 文件, 分类 id 的结构最开始设计的比较笨重. 于是我决定重构它. 我把它定义成一个 json 树的形式, 大概是这样: