经过一段工作时间的沉淀后,我发现需要细看一些书籍验证当中获得的经验。在JavaScript上的结构和模式上的考虑,使我决定精读《JavaScript设计模式》(中文版)。在阅读的过程中,发现中文版的某些译文有些不适当的时候,我就会查询相应英文版《Learning JavaScript Design Patterns》,斟酌差异。我摘拿了一些内容记录,在下面描述中,中文上有异议地方,我会附带上英文部分,并记录自己想法。
模式目的:
中文:
编写易于维护的代码,其中一个最重要方面是能够找到代码中重复出现的主题并优化它们。
英文:
One of the most important aspects of writing maintainable code is being able to notice the recurring themes in that code and optimize them.
我:
在这段话中,我比较纠结的是对于“主题”这个词的翻译,字面上the recurring themes翻译成“重复出现的主题”,主题指的是什么,并不能让人清楚。其实就是代码的“部分”,所以我比较倾向翻译成“重复出现的部分”。
模式的好处:
中文:
1. 模式是已经验证的解决方案。
2. 模式很容易被复用。
3. 模式富有表达力。
看到模式时,通常就表示有一个设置好的结构和表达解决方案的词汇,以帮助我们非常轻松地表达出所实现的大型解决方案。
英文:
1. Patterns are proven solutions.
2. Patterns can be easily reused.
3. Patterns can be expressive.
When we look at a pattern there‘s generally a set structure and vocabulary to the solution presented that can help express rather large solutions quite elegantly.
我:
前两点是比较好理解,对照英文版是可以的,但第三点“富有表达力”过于直译了吧。我觉得可以翻译成“模式具有概括性”。另外对于第三点的阐述,我就更觉得不对劲了,比对之后,我觉得可以这样翻译。
——当我们看一个模式时,通常就有一套结构和词汇描述的解决方案,可以帮助我们很轻松地概括大型解决方案。
模式三法则:
成为有效模式的三个准则。
中文:
1. 适合性
2. 实用性
3. 适用性
英文:
1. Fitness of purpose
2. Usefulness
3. Applicability
我:
在看到中文的“适合性”和“适用性”,我心里就一千只羊驼在跑,这是在逗我吧,这尼玛有什么区别啊。于是查看英文得知重点在第一个翻译上。Fitness of purpose翻译成“适合性”应该是不合理的。我暂时也没有好的想法,姑且先放着。
设计模式类别:
每一种设计模式都重点关注一个特定的面向对象设计问题或设计要点,描述何时使用它,在另一些约束条件下是否还能使用,以及使用的效果和利弊。设计模式划分为下面三种类别:
中文:
1. 创建型设计模式
创建型设计模式专注于处理对象创建机制,以适合给定情况的方式来创建对象。
该分类的模式:Constructor(构造器)、Factory(工厂)、Abstract(抽象)、Prototype(原型)、Singleton(单例)和Builder(生成器)。
2. 结构型设计模式
结构型模式与对象组合有关,通常可以用于找出在不同对象之间建立关系的简单方法。
该分类的模式:Decorator(装饰者)、Facade(外观)、Flyweight(享元)、Adapter(适配器)和Proxy(代理)。
3. 行为设计模式
行为模式专注于改善或简化系统中不同对象之间的通信。
该分类的模式:Iterator(迭代器)、Mediator(中介者)、Observer(观察者)和Visitor(访问者)。
我:
这里中文翻译是正确的,所以就不附带上英文版。
一开始我对结构型设计模式的描述还是不是很明白,对象之间的“建立关系”和对象之间的“通信”区别在于什么地方。于是在我查询资料后,大部分篇章都是将结构型模式用途描述为主要是用于描述如何将类组合在一起去构成更大的结构。所以,与其是说“建立关系”,倒不如说是“组合”。
简而言之:
这三类设计模式解决问题就是:
创建型设计模式 : 对象创建
结构型设计模式 : 对象组合
行为设计模式 : 对象通信
总结
这一篇只是开篇的模式简介,东西并不详尽,因为概念上的东西挺容易忘,很多人(包括我自己)也不大喜欢讲概念,所以捡取我觉得比较重要或有异议地方。另外以此做一个引导,接下来的篇章是细谈每一个书中谈到的模式。
参考文献
1. 《Learning JavaScript Design Patterns》 by Addy Osmani
https://addyosmani.com/resources/essentialjsdesignpatterns/book/
2. 《JavaScript设计模式》by 徐涛【译】
本文为原创文章,转载请保留原出处,方便溯源,如有错误地方,谢谢指正。
本文地址 :http://www.cnblogs.com/lovesong/p/5572121.html