Ext JS 与设计模式

从 Ext JS 的源码看,作者编码之时参考了不少设计模式方面的宝贵经验,运用到许多类的设计中去的。可是一旦上升到“设计模式”,有朋友说不值当,大意是受限于 Script 级别编码的话搞“设计模式”会不讨好的说。言下之意,我只不过在弄 Widget 罢了,真不必劳师动众搬弄设计模式,许多好用的 Widget 不是没有设计模式的指导也可以在项目上运行得好好的? ——先不讨论怎么样的结论,我们的初衷是既然难得有 JS 框架使用上了设计模式,而恰好自己比较熟悉 Ext JS,就拿它当作一个了解设计模式的一个例子吧。下面试制作一表格,列出框架中出现的模式,并且还有我所接触与设计模式联系密切的内容,不一定属于 Ext JS 的,只是较吻合的都纳入表中。

创建模式 Creational Patterns

Pattern

出现的地方

说明
Abstract Factory 抽象工厂 XXXMgr.createCmp/createXX() 通过管理者类 createStore() 创建新数据容器。
Builder 生成器模式 …… many factories
FactoryMethod工厂方法模式 Xtype 延时子组件。
Prototype 原型模式 JS 的 function.prototype

明显,我望文生义了呵呵,难道js的 function.prototype 不属于原型模式?怎么理解?
纠结的俺发现下面资源值得参考:

http://www.cnblogs.com/birdshome/archive/2005/02/21/101550.html

Singleton 单例模式 Ext={}/Ext.ComponentMgr 许多管理者类(XXXMgr)本身可以被认为是单例模式。

结构模式 Structural Patterns

Pattern

出现的地方

说明
Adapter 适配器模式 prototype-adapter.js/yui-adapter.js/jquery-adapter.js 最底层采用 Adapter 模式,把不同 JS 库的 API 封装成一套统一的接口。适配器是使用 MVC 时,经常附带用到的技巧:使用适配器将模型适配成符合现有视图和控制器所需要的模型。
Bridge …… ……
Composite 组合模式 Ext.CompositeElement元素类 Ext.select()/query() 查询元素返回 CompositeElment 结果。总体和个体实现了同一个接口。
Decorator …… ……
Facade …… ……
Flyweight 享元模式 Ext.fly() 不缓存元素,直接返回结果。不需要多次被访问。不需要共享。
Proxy 代理模式 Ext.data.ScriptProxy 跨域访问解决方案,另外相同的有在服务端代理的,也是 Proxy 模式的一种表示。

行为模式 Behavioral Patterns

Pattern

出现的地方

说明
Chain of Responsibility …… ……
Command Undo/ redo ……
Iterator …… ……
Mediator …… ……
Memento …… ……
Interpreter 解释器模式

Ext.util.JSON

encode() 编码为 JSON;decode() 还原为JS对象;另外有人说 JavaScript 嵌入正则表达式的特殊语法使用 RegExp 也是应用解释器模式的典型一例。
Observer 观察者模式 Ext.util.Observable 类 UI 系统就是事件系统,事件系统最多采用的,就是观察者模式。MVC 中 model 是观察者模式。
State 状态模式    可否参考 Ext JS 4 的 stateful 类?事先声明,说这个例子乃凑数滴,,不一定严谨。
Strategy 策略模式 MVC 控制器 Controller 是视图 View 的策略。MVC 是复合模式,结合了多种模式在内。
Template Method 模板方法模式 许多类的 method: Ext.emtpyFn 空函数 让子类写实现的方法。
Vistor …… ……

由此可见,设计模式与真实编码还是有不少融合的地方。关键在于怎么去理解并加以消化。为了大家在复杂性目前,能更好地沟通,真正了解代码的含义与真实企图,应该提倡一种程序员彼此都了然的软件方法论或开发思维。估计“设计模式”就是这样的前提下被“提炼”出来的。

设计模式是经过许多前辈累积下来的宝贵经验,是高度抽象化,深思熟虑的结果,方可为大家推崇备至,引导我们走正确的路。但这种经验并非简单地照搬照套,小弟也在学习之中,尚属肤浅。最近收到《研磨设计模式》一书,感觉写得很好。看了一些章节后,再回想起Ext好像也有很多应用设计模式的地方,于是草写一下,而且没有写不熟悉的模式,免得糗多了。以上表格可能有牵强的地方,请看客姑且当作不完善的笔记。

2015-01-24 学习 Java 遇到的模式,很受用:

观察者模式 :MVVM

Composite 组合模式:JUnit 多个测试用例

HttpServletRequestWrapper - Decorator 装饰模式:HttpServletRequestWrapper 采用装饰模式重新封装 request 预留位置,通过衍生子类修饰对象,否则直接使用本类。

上一篇:HTML“硬”渐变


下一篇:Windows phone应用开发[15]-辅助工具