编辑推荐
Web应用取代桌面程序的时代已经到来!作为Web前端的核心技术,JavaScript的重要性不言而喻,它有望成为下一代统治性程序语言。但由于业界长期的误解和滥用,也有不少人仍然对此半信半疑。那么,JavaScript到底能否当此大任呢?本书中,Google和Yahoo公司的两位Web专家对此给出了掷地有声的肯定回答。作者针对常见的开发任务,从YUI等实战代码中取材,提供了专家级的解决方案,不仅透彻剖析了JavaScript中的面向对象编程。而且深入探讨了如何用JavaScript实现以前只在服务器端应用的设计模式。如何根据实际场景选择恰当的设计模式,开发出高质量的企业级代码。本书充分证明:JavaScript不仅毫不逊色于其他高级语言,已经是一种成熟且强大的面向对象语言。而且还拥有Java和C++等语言不具备的面向未来的特性,因此更加灵活、更富于表现力。无论是前端工程师-还是服务器端程序员,通过本书都将使自己的JavaScript功力提升到前所未有的高度。
内容简介
《JavaScript设计模式》共有两部分。部分给出了实现具体设计模式所需要的面向对象特性的基础知识,主要包括接口、封装和信息隐藏、继承、单体模式等内容。第二部分则专注于各种具体的设计模式及其在JavaScript 语言中的应用,主要介绍了工厂模式、桥接模式、组合模式、门面模式等几种常见的模式。为了让每一章中的示例都尽可能地贴近实际应用,书中同时列举了一些JavaScript 程序员常见的任务,然后运用设计模式使其解决方案变得更模块化、更高效并且更易维护,其中较为理论化的例子则用于阐明某些要点。《JavaScript设计模式》适合各层次的Web 前端开发人员阅读和参考,也适合有C++/Java/C# 背景的服务器端程序员学习。
作者简介
Ross Harmes,Web程序员,有10多年编程经验。现任Yahoo前端工程师。他是开源图片软件Birch的开发者。
Dustin Diaz,Web程序员,现任Google用户界面工程师。新一代JavaScript框架DEDlChain(兼具jQuery和YUI的优势)的开发者。他还是一位中长跑健将,800米跑曾经在全美国排名第13。拥有西班牙语学士学位。
在线试读
在事件驱动的环境中,比如这种持续寻求用户关注的环境中,观察者模式〔又名发布者—订阅者(publisher-subscriber)模式〕是一种管理人与其任务之间的关系(确切地讲,是对象及其行为和状态之间的关系)的得力工具。用JavaScript的话来说,这种模式的实质就是你可以对程序中某个对象的状态进行观察,并且在其发生改变时能够得到通知。
观察者模式中存在两个角色:观察者和被观察者。本书一般倾向于称其为发布者和订阅者。这种模式在JavaScript中有几种不同的实现方式,本章将对其中的一些实现方式进行考察。不过我们首先要说明一下发布者和订阅者这两种角色。下一节的例子以报业为例说明了观察者模式的工作方式。
15.1示例:报纸的投送
在报纸行业中,发行和订阅的顺利进行有赖于一些关键性的角色和行为。首先是读者。他们都是订阅者(subscriber),是与你我一样的人。我们消费数据并且根据读到的消息做出反应。我们可以选择自己的居住地点,让报社把报纸送到自己家中。这个活动中的另一个角色是发行方(publisher)。他们负责出版诸如San Francisco Chronicle、New York Times和Sacramento Bee这样的报纸。
确定了各方的身份之后,我们就可以分析每一方的职责所在。作为报纸的订阅者,我们有一些事要做。数据到来的时候我们收到通知。我们消费数据。然后我们根据数据做出反应。只要报纸到了订阅者手中,他们就可以自行处置。有些人读完之后会将其扔在一边,有些人会向朋友或家人转述其中的新闻,甚至还有一些人会把报纸送回去。总而言之,订阅者要从发行方接收数据。
发行方则要发送数据。在本例中,发行方也是投送方(deliver)。一般说来,一个发行方很可能有许多订阅者,同样,一个订阅者也很可能会订阅多家报社的报纸。问题的关键在于,这是一种多对多的关系,需要一种高级的抽象策略,以便订阅者能够彼此独立地发生改变,而发行方能够接受任何有消费意向的订阅者。
15.1.1推与拉的比较
对于报社来说,只为给几个订阅者投送报纸就满世界跑是不划算的。而纽约市的居民也不可能特意飞到旧金山去拿自己订的San Francisco Chronicle,要知道这份报纸可以直接投送到他们家门口。
订阅者要想拿到报纸的话有两种投送方式可选:推或拉。在推环境中,发行方很可能会雇佣投送人员四处送报。换句话说,他们把自己的报纸推出去,让订阅者收取。在拉环境中,规模较小的本地报社可能会在订阅者家附近的街角提供自己的数据,供订阅者“拉”。那些成长型发行方没有足够的资源进行大规模投送,因此采用拉方案,让订阅者到当地的杂货店或自动售货机那里“拿”报,对于它们来说往往是个优化投送环节的好办法。
15.1.2模式的实践
在JavaScript中有多种方法可以实现发布者—订阅者模式。在展示那些示例之前,我们先确保各种角色的扮演者(对象)及其行为(方法)都已就绪。
……
- 微信号
- 网站问题、用户注册登录请联系站长,看到第一时间及时回复。
- 公众号
- 慧眼看每日荐书,关键字找书,新功能陆续增加中,敬请关注!