最近在看Essential JavaScript Design Patterns For Beginners
原文地址:http://www.addyosmani.com/resources/essentialjsdesignpatterns/book/
自己做了点笔记;摘录如下
1、一个设计模式必要的部分:
(1)名称和描述Pattern Name and description
(2)内容提示 context outline——是对用户哪方面需求的响应
(3)问题陈述——正在解决的问题的声明,让别人能够理解模式的意图
(4)解决方案——用户的问题是如何得到解决的,给出一个可理解的列表,包括步骤和想法
(5)设计方案——模式设计的描述,特别要说明关于用户交互的行为描述
(6)实现——模式如何实施的指南
(7)插图——模式中类的可视化描述
(8)例子——用最简单的形式实现的例子
(9)必要条件 ——支持该模式所需的其他模式
(10)关系——这个模式与什么模式类似??它模仿了其他的模式吗?
(11)已知的使用——这个模式已经在被别人使用了吗?如果是,在哪里?是怎样使用的?
(12)讨论——团队和作者对这个模式的想法
2、需要花费一定时间来吸收一些不同的设计模式,并吸取对你有意义的部分 - 这将帮助你实现自己的目标。——学习已有的设计模式(也就是要膜拜大牛~!)
3、构建自己的设计模式的一些提示:
(1)在头脑中确定它的实用性——确保你的模式是解决反复出现的问题而不是临时的解决方案
(2)确保你借鉴了最佳的做法——你所做的设计应该基于那些你从最佳实践中理解的原则
(3)你的设计模式应该对用户透明——设计模式应该是对任何类型的用户完全透明的。
(4)记住!独创性在设计模式中不是最关键的——当在写自己的模式的时候,你不必采用独创的解决方法,也不必担心与其他模式中一些小部件的重合。只要你的模式足够强大,得到了广泛的运用,就有机会被作为是一个适当的模式
(5)了解模式与设计之间的差异——一个设计模式一般来自于被验证了的最佳实践,作为设计师解决问题的模型。模式的作用是给提供设计师指导,使设计师有 更好的设计选择来满足用户的需求。
(6)需要有很多的示例——一个好的模式描述同样需要强大的例子来证明它的成功运用。要显示广泛的应用,理想的例子可以表现出好的设计原则。
4、反模式是一种不好的设计,在JavaScript中有以下几种反模式:
(1)定义大量的全局变量污染命名空间
(2)传递字符串而不是函数,导致setTimeOut()和setInterval都将触发内部使用eval()
(3) Prototyping against the Object object (this is a particularly bad anti-pattern)??对象的反原型?(这是一种恶劣的反模式)
(4)使用内联形式的JavaScript
(5)使用document.write,而document.createElement是比较合适的替代品。document.write已经滥用了多年,有很多缺点,包括如果它在页面加载以后使用,实际上它可以覆盖你的页面,而document.createElement则不会。你可以在http://jsfiddle.net/addyosmani/6T9vX/ 这里看到活生生的例子。另外它 在XHTML中不能使用也是建议使用document.createElement的原因。备注:http://jsfiddle.net/ 这个貌似不错啊。。可以测试很多js。。。
5、几种模式的简单说明
(1)创建型模式:对象创建的基本方法可能会导致在一个项目中增加复杂性,可以通过创建一些模式来解决这个问题,这些创建型模式有:factory(工厂),abstract(抽象),prototype(原型),singleton(单体)和builder(建造者)
(2)结构型模式:此类模式的重点是类和对象的组成结构。结构性的’class’的创建模式使用继承来写接口,’object’模式定义方法创建对象获得新的功能。有:Decorator(装饰者), Façade(外观), Composite(组合), Adapter(适配) and Bridge(桥接)
(3)行为模式:此类模式的焦点在于类中对象之间的通信。它们的目的就是对了更灵活的实现通信的功能。包括:Iterator(迭代), Mediator(调解), Observer(观察) and Visitor(访问).
一、 创建模式
这是其他模式的基础,而且也是很容易理解的。创建模式就是处理应用中创建对象的。在JavaScript中,传统的创建对象的方式(名/值对的集合)如下:
var newObject = new Object();
var newObject = {};
newObject['someValue'] = 'Hello World';
(注:良好的写法是var newObject = {}; 对象直接量的写法。)