摘要:状态模式主要可以用于这种场景1 一个对象的行为取决于它的状态2 一个操作中含有庞大的条件分支语句回想下街头霸王的游戏。隆有走动,攻击,防御,跌倒,跳跃等等多种状态,而这些状态之间既有联系又互相约束。比如跳跃的时候是不能攻击和防御的。跌倒的时候既不能攻击又不能防御,而走动的时候既可以攻击也可以跳跃。要...
阅读全文
随笔分类 - 设计模式
摘要:状态模式主要可以用于这种场景1 一个对象的行为取决于它的状态2 一个操作中含有庞大的条件分支语句回想下街头霸王的游戏。隆有走动,攻击,防御,跌倒,跳跃等等多种状态,而这些状态之间既有联系又互相约束。比如跳跃的时候是不能攻击和防御的。跌倒的时候既不能攻击又不能防御,而走动的时候既可以攻击也可以跳跃。要...
阅读全文
摘要:享元模式主要用来减少程序所需的对象个数. 有一个例子, 我们这边的前端同学几乎人手一本《JavaScript权威指南》. 从省钱的角度讲, 大约三本就够了. 放在部门的书柜里, 谁需要看的时候就去拿, 看完了还回去. 如果同时有4个同学需要看, 此时再去多买一本.在webqq里面, 打开QQ好友列表...
阅读全文
摘要:职责链模式是一个对象A向另一个对象B发起请求,如果B不处理,可以把请求转给C,如果C不处理,又可以把请求转给D。一直到有一个对象愿意处理这个请求为止。打个比方,客户让老板写个php程序。老板肯定不写,然后老板交给了部门经理。部门经理不愿意写,又交给项目经理。项目经理不会写,又交给程序员。最后由码农来...
阅读全文
摘要:备忘录模式在js中经常用于数据缓存. 比如一个分页控件, 从服务器获得某一页的数据后可以存入缓存。以后再翻回这一页的时候,可以直接使用缓存里的数据而无需再次请求服务器。实现比较简单,伪代码:var Page = function(){ var page = 1, cache = {...
阅读全文
摘要:组合模式又叫部分-整体模式,它将所有对象组合成树形结构。使得用户只需要操作最上层的接口,就可以对所有成员做相同的操作。一个再好不过的例子就是jquery对象,大家都知道1个jquery对象其实是一组对象集合。比如在这样一个HTML页面 我们想取消所有节点上绑定的事件, 需要这样写v...
阅读全文
摘要:迭代器模式提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该方法中的内部表示。js中我们经常会封装一个each函数用来实现迭代器。array的迭代器:forEach = function( ary, fn ){ for ( var i = 0, l = ary.length; i < l...
阅读全文
摘要:中介者对象可以让各个对象之间不需要显示的相互引用,从而使其耦合松散,而且可以独立的改变它们之间的交互。打个比方,军火买卖双方为了安全起见,找了一个信任的中介来进行交易。买家A把钱交给中介B,然后从中介手中得到军火,卖家C把军火卖给中介,然后 从中介手中拿回钱。一场交易完毕,A甚至不知道C是一只猴子还...
阅读全文
摘要:模式方法是预先定义一组算法,先把算法的不变部分抽象到父类,再将另外一些可变的步骤延迟到子类去实现。听起来有点像工厂模式( 非前面说过的简单工厂模式 ).最大的区别是,工厂模式的意图是根据子类的实现最终获得一种对象. 而模版方法模式着重于父类对子类的控制.按GOF的描叙,模版方法导致一种反向的控制结构...
阅读全文
摘要:策略模式的意义是定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。一个小例子就能让我们一目了然。回忆下jquery里的animate方法.$( div ).animate( {"left: 200px"}, 1000, 'linear' ); //匀速运动 $( div ).anima...
阅读全文
摘要:GOF官方定义: 访问者模式是表示一个作用于某个对象结构中的各元素的操作。它使可以在不改变各元素的类的前提下定义作用于这些元素的新操作。我们在使用一些操作对不同的 对象进行处理时,往往会根据不同的对象选择不同的处理方法和过程。在实际的代码过程中,我们可以发现,如果让所有的操作分散到各个对象中,整个系...
阅读全文
摘要:外观模式(门面模式),是一种相对简单而又无处不在的模式。外观模式提供一个高层接口,这个接口使得客户端或子系统更加方便调用。用一段再简单不过的代码来表示var getName = function(){ return ''svenzeng" } var getSex = function(){ ...
阅读全文
摘要:桥接模式的作用在于将实现部分和抽象部分分离开来, 以便两者可以独立的变化。在实现api的时候, 桥接模式特别有用。比如最开始的singleton的例子.var singleton = function( fn ){ var result; return function(){ ...
阅读全文
摘要:代理模式的定义是把对一个对象的访问, 交给另一个代理对象来操作.举一个例子, 我在追一个MM想给她送一束花,但是我因为我性格比较腼腆,所以我托付了MM的一个好朋友来送。这个例子不是非常好, 至少我们没看出代理模式有什么大的用处,因为追MM更好的方式是送一台宝马。再举个例子,假如我每天都得写工作日报(...
阅读全文
摘要:去年年前当时正在开发dev.qplus.com, 有个存储应用分类id的js文件, 分类id的结构最开始设计的比较笨重. 于是我决定重构它. 我把它定义成一个json树的形式, 大概是这样:1 var category = { 2 music: { 3 id: 1, 4 children: [...
阅读全文
摘要:观察者模式( 又叫发布者-订阅者模式 )应该是最常用的模式之一. 在很多语言里都得到大量应用. 包括我们平时接触的dom事件. 也是js和dom之间实现的一种观察者模式.1 div.onclick = function click (){ 2 alert ( ''click' ) 3 } ...
阅读全文
摘要:简单工厂模式是由一个方法来决定到底要创建哪个类的实例, 而这些实例经常都拥有相同的接口. 这种模式主要用在所实例化的类型在编译期并不能确定, 而是在执行期决定的情况。 说的通俗点,就像公司茶水间的饮料机,要咖啡还是牛奶取决于你按哪个按钮。简单工厂模式在创建ajax对象的时候也非常有用.这个库里提供了...
阅读全文
摘要:《Practical Common Lisp》的作者 Peter Seibel曾说,如果你需要一种模式,那一定是哪里出了问题。他所说的问题是指因为语言的天生缺陷,不得不去寻求和总结一种通用的解决方案。不管是弱类型或强类型,静态或动态语言,命令式或说明式语言、每种语言都有天生的优缺点。一个牙买加运动员...
阅读全文
|