《外文翻译:学用JavaScript设计模式》

VIP免费
2025-03-14 0 0 2.07MB 164 页 5.9玖币
侵权投诉
学用 JavaScript 设计模式
设计模式是可重用的用于解决软件设计中一般问题的方案。设计模式如此让人着迷,以至在任何编程语言中都有对其进行的探索。
其中一个原因是它可以让我们站在巨人的肩膀上,获得前人所有的经验,保证我们以优雅的方式组织我们的代码,满足我们解决问题所需要的条件。
设计模式同样也为我们描述问题提供了通用的词汇。这比我们通过代码来向别人传达语法和语义性的描述更为方便。
本文我们将阐述JavaScript编程语言中经典和现代的设计模式。
目标读者
本书的以那些期望提高自己在设计模式方面的知识并将它们应用到javascript编程语言中的专业开发者为目标读者。
一些所涉及的概念(闭包,原型继承)将假设读者具备一定程度的基本的预备知识和理解。如果你发现自己需要更深入的阅读这个话题,为了你的方便,我们提供了一个推荐
书目清单。
如果你希望学习如何写出漂亮的,具有结构性和组织性的代码,我相信这本书就是为你而写。
我将永远感激那些审阅并帮助改进此书的有才干的技术审核人员们, 包括所有的来自社区的人士。他们带来的知识和热情简直令人惊异。官方的技术审核人员的微博和博客也
是一个思想和灵感经常的来源,我诚恳的推荐并挑出它们。
Nicholas Zakas (http://nczonline.net, @slicknet)
Andrée Hansson (http://andreehansson.se, @peolanha)
Luke Smith (http://lucassmith.name, @ls_n)
Eric Ferraiuolo (http://ericf.me/, @ericf)
Peter Michaux (http://michaux.ca, @petermichaux)
Alex Sexton (http://alexsexton.com, @slexaxton)
我同样感谢 Rebecca Murphey (http://rebeccamurphey.com, @rmurphey) 为写作此书时提供的灵感,更重要的是,继续让本书可以在GitHub上和通过O'Reilly获得。
最后,我也感谢我的好妻子,在我整理这本出版物时的不遗余力的支持。
编写人员列表
这本书里所包含的一些模式是基于个人经验而实现的,其中的许多模式以前都是由JavaScript社团所确认的。因此这项工作是许多开发者所有经验的结晶。类似于Stoyan
Stefanov(在JavaScript 模式里)的防止插入编写人员列表而打断叙述这样的逻辑思路,我在参考资料部分列出了编写人员列表并且为所有内容建议了阅读材料。
如果任何文章或者链接没有出现在参考资料列表里,请接受我诚挚的道歉。如果你联系我的话,我将确保更新这个列表,以把你包含在这个列表里。
如何阅读
本书同时面向初学者和中级开发者,因此假设读者已掌握 Javascript 的基本知识。如果您要了解更多 Javascript 的相关知识,我很乐意为您推荐以下文章:
JavaScript 权威指南》(原名:JavaScript: The Definitive Guide),David Flanagan
JavaScript编程精解》(原名:Eloquent JavaScript), Marijn Haverbeke
JavaScript 模式》(原名:JavaScript Patterns),Stoyan Stefanov
JavaScript 语言精粹》(原名:JavaScript: The Good Parts), Douglas Crockford
简介
什么是设计模式?
"Pattern"-ity Testing, Proto-Patterns & The Rule Of Three
设计模式的结构
编写设计模式
反模式
设计模式的分类
设计模式分类概览表
JavaScript 设计模式
构造器模式
模块化模式
暴露模块模式
单例模式
观察者模式
中介者模式
原型模式
命令模式
外观模式
工厂模式
Mixin 模式
装饰模式
亨元(Flyweight)模式
JavaScript MV* 模式
MVC 模式
MVP 模式
MVVM 模式
最新的模块化 JavaScript 设计模式
AMD
CommonJS
ES Harmony
JQuery 中的设计模式
Composite Pattern
适配器模式
外观模式
观察者模式
迭代器模式
惰性初始模式
代理模式
建造者模式
jQuery 插件的设计模式
JavaScript 命名空间模式
总结
参考
#
写出可维护的代码的一个最重要的方面就是在代码中能够注意到重复出现的主题并对其进行优化。设计模式的知识领域是无价的。
在本书的第一部分,我们将探索那些真正可以应用于任何编程语言的设计模式的历史和重要性。如果你已经熟悉这段历史,可以直接跳过"什么是模式?"这一章继续阅读。
设计模式可以追溯到早期的一名叫Christopher Alexander的建筑师。他经常会发表一些他在处理设计问题时的经验和如何与建筑和城镇相联系的。有一天,当Alexander使
用了一次又一次后,他发现某些设计结构会导致做出的效果是最好的。
Sara IshikawaMurray Silverstein的协作下,Alexander发明了一种可以帮助授权任何人去设计和构建希望的任何规模的模式语言。这在1977年的一篇名为"A
Pattern Language"的论文中发表,在后来作为一本完整的精装书发表。
大约30年前,软件工程师开始将Alexander曾写过的原理并入第一版的设计模式,这是一个用来对那些想要改善他们编码技巧的新手开发者的一个指南。要注意,这时设计模
式背后的概念实际上已经在编程行业成立以来就有了,虽然不是那么正式的形式。
第一个也是最标志性的关于软件工程的设计模式的正式作品是在1995年一本叫Design Patterns: Elements Of Reusable Object-Oriented Software的书中发表,这
Erich Gamma, Richard Helm, Ralph Johnson John Vlissides - 一群被称为Gang of Four(简称GoF)的人写的。
GoF的出版物被认为是非常有助于推动设计模式的概念在我们的领域发展的,因为它描述了大量的开发技术和缺陷,而且还有在今天的世界中大量使用的23个核心的面向对象
的设计模式。我们将详细地在"设计模式分类"这一章中介绍这些模式。
在本书中,我们将看到一些流行的JavaScript设计模式,并探索为什么一些特定的模式比其他的更适合你的项目。但请记住模式不仅仅可以应用在单纯的JavaScript (例如:
标准JavaScript代码)里,也可以在一些像jQuerydojo的抽象库里使用。在我们开始之前,让我们看看模式在软件设计中的确切定义。
模式是什么?
一个模式就是一个可重用的方案,可应用于在软件设计中的常见问题 - 在我们的例子里 - 就是编写JavaScriptweb应用程序。模式的另一种解释就是一个我们如何解决问题
的模板 - 那些可以在许多不同的情况里使用的模板。
那么理解和熟悉模式为什么是如此的重要?设计模式有以下三点好处:
1. 模式是行之有效的解决方法:他们提供固定的解决方法来解决在软件开发中出现的问题,这些都是久经考验的反应了开发者的经验和见解的使用模式来定义的技
术。
2. 模式可以很容易地重用:一个模式通常反映了一个可以适应自己需要的开箱即用的解决方案。这个特性让它们很健壮。
3. 模式善于表达:当我们看到一个提供某种解决方案的模式时,一般有一组结构和词汇可以非常优雅地帮助表达相当大的解决方案。
模式不是一个确切的解决方案。我们要记住模式的角色仅仅是给我们提供一个解决方案。模式不能解决所有的设计问题,也不能代替优秀的软件设计师。然而,它们在帮助我
们。接下来我们将看看模式必须提供的其他的一些优势。
模式的重用可以帮助防止在应用程序开发过程中出现的一些可能导致重大问题的小问题。这意味着当代码是建立在行之有效的模式上时,我们可以花更少的时
间去关心我们的代码结构,从而能花更多的时间关注我们的解决方案的整体质量。这是因为模式可以鼓励我们在更好的结构化和有组织的方式下编码,这将避免在未
来由于清洁的目的而去重构它。
模式可以提供一个不需要绑定到一个特定问题的书面的概括性的解决方案。这个广义的方法意味着不用管我们正在处理的应用程序 (许多情况下的编程语言)
计模式的应用可以提高我们的代码的结构。
某些模式可以通过避免重复来减小我们代码的文件大小。通过鼓励开发者更仔细地看待他们的解决方案来减少重复的地方,如通过将类似的执行流程作为一个一
般性的函数来减少函数的数量,这样我们就可以减小代码库的总体大小,这也成为使代码更DRY
模式增加了开发者的词汇,这使得交流更快速。
经常使用的模式可通过收集其他使用这些模式的开发人员贡献给设计模式社区的经验来改进。在某些情况下,这将导致全新模式的创建,同时也可以提供改进
的指导大家如何使用特定的模式才是最好的。这可以确保基于模式的解决方案继续变得比特别的解决方案更健壮。
我们已经每天都在使用模式
为了了解模式有多有用,让我们看看jQuery提供给我们的一个很简单的元素选择问题。
假设我们有一个为页面上每一个class"foo"DOM元素添加一个计数器的脚本,什么才是查询这个元素的集合的最有效的方法呢?有几种不同的方法可以解决这个问题:
1. 选择页面上所有的元素并存储它们的引用,然后使用正则表达式 (或其他方式) 来过滤这个集合中那些class"foo"的元素的引用。
2. 使用像asquerySelectorAll()的现代原生浏览器的特性,来选择所有的class"foo"的元素。
3. 使用像asgetElementsByClassName()的原生特性同样可以获取期望的集合。
那些,这些选择哪个是最快的呢?实际上第三个,比其他的 替代选择 8-10倍。但在实际的应用程序中,第三个选择无法在Internet Explorer 9以下的版本中使用,从而
只能使用第一个,第二个和第三个都不支持。
使用jQuery的开发人员就不必担心这个问题,因为很幸运的是它使用Facade模式把这个问题抽象了出来。正如我们即将在后面更详细的介绍的那样,这种模式提供了一组简
单的对更复杂的底层代码的抽象接口 (例如$el.css(),$el.animate()) 。正如我们所看到的,这意味着我们只会对实现级别的细节花费更少的时间。
在其后,库会根据我们当前浏览器的支持自动选择最优的方法来选择元素,我们只使用抽象层。
我们可能都熟悉jQuery$("selector"),这是更容易使用的在一个页面选择HTML元素的方法,这样我们就不必手动来选择
getElementById(),getElementsByClassName(),getElementByTagName()等方法。
虽然我们知道querySelectorAll()试图解决这个问题,但比比使用jQueryFacade接口和自己来选择最优的方式时花费的精力,毫无疑问,使用模式可以提供真实世界的抽
象价值。
我们将在本书的后面看到更多的设计模式。
模式特性测试,模式原型和三条规则
记住并不是每个算法、每个最佳实践和每个解决方案都可能被认为是一个完整的模式。这儿可能缺少了几个关键因素,而且模式社团除非经过严格的审查才谨慎地声明某东西
为模式的。即使某东西对我们来说似乎满足了模式标准,它都不应该被当作模式,直到它由他人经过适当时间的周密调查和测试后才可能当作模式。
回头看看Alexander曾经做过的工作,他声明模式应当既是过程也是事物。这个定义故意不明确,因为他紧跟着说模式应该是创建事物的过程。这就是为什么模式通常集中
定位在表面上可识别的结构的原因。例如,我们应当能够可视化地描绘(或者绘制)图片来展示把模式应用到实践中的结构。
在研究设计模式的时候,无意间碰到术语模式原型是很正常的。那么什么是模式原型呢? 好,仍然没有通过"模式特性测试的模式通常认为是模式原型。模式原型也许源自
于某人已经确定的值得与社团共享的特定解决方案的工作,然而由于它提出时间短,所以可能仍然没有机会接受严格的审查。
另外,个人共享的模式也许没有时间或者没有兴趣通过模式特性测试这个过程,不过可能发布了这些模式原型的简短说明。这种类型模式的简要描述或者片段就是众所周知的
小模式。
全面文档化具有资格的模式这样的工作是非常令人气馁的。回头看看设计模式领域最早期的某些工作,如果一个模式能做到以下事情,那么这个模式就可以认为是好的模式:
解决一类特定的问题:模式不能假设仅仅关注原理或者策略。它们需要关注解决方案。这是好的模式最重要的因素之一。
问题的解决方案不是表面上的:我们发现解决问题的技术常常首先试图源自于某个众所周知的原理。最佳的设计模式通常间接地提供问题的解决方案-认为模式是与
设计相关的最具有挑战性的问题必然的解决方法。
所描述的想法一定得到了证明:设计模式需要提供所描述的它们运行的证据,如果没有这些证据,就不会认真的考虑这个设计。如果模式事实上是高度理论性的
话,那么只有冒险者才可能试着用它。
它必须说明与代码之间关系:在某些情况下,模式似乎说明了一种类型的模块。虽然实现的可能就是这个方法,但是官方的模式说明一定要更深入的描述系统结构
和机制,以解释它与代码之间的关系。
我们认为不满足准则的模式原型不值得学习,这可以得到谅解,然而,事实远不是这样的。许多模式原型确实非常的好。我不是说所有的模式原型都值得看,不过总有几个在
自然环境下成长的有用的模式原型可以在未来的项目中帮到我们。从心底里使用上面列表来做最佳评判的话,你在选择哪个是模式的过程中将感觉非常愉快。
模式是否有效的附加要求之一是模式要展示某些重现现象。这个就是至少在三个关键方面 ,也就是三条规则验证是否取得资格经常要做的事情。为了展示使用这个规则后的重
现,模式必须证明其:
1. 适用性-模式怎样才能被认为是成功的。
2. 有用性-为什么认为这个模式是成功的?
3. 可用性 -因为设计得到广泛的应用,所以认为这个设计就是模式吗?如果是这样的话,那么需要说明。重新审核或者定义模式的时候,牢记以上规则非常重要。
# 设计模式的结构
你可能会对设计模式的作者如何接近勾勒出概念轮廓,实施和新模式的目的。模式是最初提出的一种在两者之间建立关系的规则:
上下文环境
在这种环境下产生的系统的
一类配置,考虑到允许这种力量在自己的上下文环境中解决这一点,现在让我们对一种设计模式的组件元素,一探究竟。一种设计模式应该具有:
模式名称和相应的描述
上下文概述-在设计模式中的上下文对响应用户需求是很有效的。
摘要:

学用JavaScript设计模式序言设计模式是可重用的用于解决软件设计中一般问题的方案。设计模式如此让人着迷,以至在任何编程语言中都有对其进行的探索。其中一个原因是它可以让我们站在巨人的肩膀上,获得前人所有的经验,保证我们以优雅的方式组织我们的代码,满足我们解决问题所需要的条件。设计模式同样也为我们描述问题提供了通用的词汇。这比我们通过代码来向别人传达语法和语义性的描述更为方便。本文我们将阐述JavaScript编程语言中经典和现代的设计模式。目标读者本书的以那些期望提高自己在设计模式方面的知识并将它们应用到javascript编程语言中的专业开发者为目标读者。一些所涉及的概念(闭包,原型继承...

展开>> 收起<<
《外文翻译:学用JavaScript设计模式》.pdf

共164页,预览5页

还剩页未读, 继续阅读

声明:本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。玖贝云文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知玖贝云文库,我们立即给予删除!
分类:图书资源 价格:5.9玖币 属性:164 页 大小:2.07MB 格式:PDF 时间:2025-03-14

开通VIP享超值会员特权

  • 多端同步记录
  • 高速下载文档
  • 免费文档工具
  • 分享文档赚钱
  • 每日登录抽奖
  • 优质衍生服务
/ 164
客服
关注