查字典图书网
当前位置: 查字典 > 图书网 > 编程 > JavaScript设计模式与开发实践 > 试读

JavaScript设计模式与开发实践[试读]

1.1 动态类型语言和鸭子类型

JavaScript没有提供传统面向对象语言中的类式继承,而是通过原型委托的方式来实现对象与对象之间的继承。JavaScript也没有在语言层面提供对抽象类和接口的支持。正因为存在这些跟传统面向对象语言不一致的地方,我们在用设计模式编写代码的时候,更要跟传统面向对象语言加以区别。所以在正式学习设计模... 查看全部[ 1.1 动态类型语言和鸭子类型 ]

1.2 多态

“多态”一词源于希腊文polymorphism,拆开来看是poly(复数)+ morph(形态)+ ism,从字面上我们可以理解为复数形态。 多态的实际含义是:同一操作作用于不同的对象上面,可以产生不同的解释和不同的执行结果。换句话说,给不同的对象发送同一个消息的时候,这些对象会根据这个消息分别给... 查看全部[ 1.2 多态 ]

1.3 封装

封装的目的是将信息隐藏。一般而言,我们讨论的封装是封装数据和封装实现。这一节将讨论更广义的封装,不仅包括封装数据和封装实现,还包括封装类型和封装变化。 1.3.1 封装数据 在许多语言的对象系统中,封装数据是由语法解析来实现的,这些语言也许提供了private、public、protected等... 查看全部[ 1.3 封装 ]

1.4 原型模式和基于原型继承的JavaScript对象系统

在Brendan Eich为JavaScript设计面向对象系统时,借鉴了Self和Smalltalk这两门基于原型的语言。之所以选择基于原型的面向对象系统,并不是因为时间匆忙,它设计起来相对简单,而是因为从一开始Brendan Eich就没有打算在JavaScript中加入类的概念。 在以类为... 查看全部[ 1.4 原型模式和基于原型继承的JavaScript对象系统 ]

5.1 使用策略模式计算奖金

俗话说,条条大路通罗马。在美剧《越狱》中,主角Michael Scofield就设计了两条越狱的道路。这两条道路都可以到达靠近监狱外墙的医务室。 同样,在现实中,很多时候也有多种途径到达同一个目的地。比如我们要去某个地方旅游,可以根据具体的实际情况来选择出行的线路。  如果没有时间但是不在乎... 查看全部[ 5.1 使用策略模式计算奖金 ]

5.2 JavaScript版本的策略模式

在5.1节中,我们让strategy对象从各个策略类中创建而来,这是模拟一些传统面向对象语言的实现。实际上在JavaScript语言中,函数也是对象,所以更简单和直接的做法是把strategy直接定义为函数: var strategies = { "S": funct... 查看全部[ 5.2 JavaScript版本的策略模式 ]

5.3 多态在策略模式中的体现

通过使用策略模式重构代码,我们消除了原程序中大片的条件分支语句。所有跟计算奖金有关的逻辑不再放在Context中,而是分布在各个策略对象中。Context并没有计算奖金的能力,而是把这个职责委托给了某个策略对象。每个策略对象负责的算法已被各自封装在对象内部。当我们对这些策略对象发出“计算奖金”的请求... 查看全部[ 5.3 多态在策略模式中的体现 ]

5.4 使用策略模式实现缓动动画

如果让一些不太了解前端开发的程序员来投票,选出他们眼中JavaScript语言在Web开发中的两大用途,我想结果很有可能是这样的:  编写一些让div飞来飞去的动画  验证表单 虽然这只是一句玩笑话,但从中可以看到动画在Web前端开发中的地位。一些别出心裁的动画效果可以让网站增色不少。 ... 查看全部[ 5.4 使用策略模式实现缓动动画 ]

5.5 更广义的“算法”

策略模式指的是定义一系列的算法,并且把它们封装起来。本章我们介绍的计算奖金和缓动动画的例子都封装了一些算法。 从定义上看,策略模式就是用来封装算法的。但如果把策略模式仅仅用来封装算法,未免有一点大材小用。在实际开发中,我们通常会把算法的含义扩散开来,使策略模式也可以用来封装一系列的“业务规则”。只... 查看全部[ 5.5 更广义的“算法” ]

5.6 表单校验

在一个Web项目中,注册、登录、修改用户信息等功能的实现都离不开提交表单。 在将用户输入的数据交给后台之前,常常要做一些客户端力所能及的校验工作,比如注册的时候需要校验是否填写了用户名,密码的长度是否符合规定,等等。这样可以避免因为提交不合法数据而带来的不必要网络开销。 假设我们正在编写一个注册... 查看全部[ 5.6 表单校验 ]

5.7 策略模式的优缺点

策略模式是一种常用且有效的设计模式,本章提供了计算奖金、缓动动画、表单校验这三个例子来加深大家对策略模式的理解。从这三个例子中,我们可以总结出策略模式的一些优点。  策略模式利用组合、委托和多态等技术和思想,可以有效地避免多重条件选择语句。  策略模式提供了对开放—封闭原则的完美支持,将算法... 查看全部[ 5.7 策略模式的优缺点 ]

5.8 一等函数对象与策略模式

本章提供的几个策略模式示例,既有模拟传统面向对象语言的版本,也有针对JavaScript语言的特有实现。在以类为中心的传统面向对象语言中,不同的算法或者行为被封装在各个策略类中,Context将请求委托给这些策略对象,这些策略对象会根据请求返回不同的执行结果,这样便能表现出对象的多态性。 Pete... 查看全部[ 5.8 一等函数对象与策略模式 ]

5.9 小结

本章我们既提供了接近传统面向对象语言的策略模式实现,也提供了更适合JavaScript语言的策略模式版本。在JavaScript语言的策略模式中,策略类往往被函数所代替,这时策略模式就成为一种“隐形”的模式。尽管这样,从头到尾地了解策略模式,不仅可以让我们对该模式有更加透彻的了解,也可以使我们明白使... 查看全部[ 5.9 小结 ]