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…………
CommandUndo/ 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 预留位置,通过衍生子类修饰对象,否则直接使用本类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sp42a

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值