|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
时间:2007-06-06 关键字: Observer
Prototype框架提供了基于JavaScript语言的面向对象风格的AJAX库,使编写动态WEB程序成为可能。基于Prototype的Scriptaculous的流行就是一个很好的证明。 问题:
上述方式对于降低类之间依赖不错。但是我们必须从特定的类继承或实现特定的接口。Observer消息触发方式导致问题也需要考虑。详见:http://www.microsoft.com/china/MSDN/library/architecture/patterns/esp/DesObserver.mspx?mfr=true 当然,我们可以在JavaScript中按照上述结构实现Observer会导致更多问题,例如如何实现接口编程?即使这个问题很容易解决,无论从理解和使用上这种模式都不太方便、不够直接。 设计: 再次聚焦Observer模式并观察它的核心,会发现如何实现消息触发是关键。一旦ConcreteSubject对象拥有ConcreteObserver的引用,在消息触发时就可以直接调用后者的Update方法。
在concreteSubject的对象内部: if(this.stateChanged()) concreteObservers.update(this,args); 再看我的问题:在调用A对象X方法之后调用B对象的Y方法。 在A对象内部: this.X(); B.Y(); A. _$_X = A.X; A.X = {this._$_X(); B.Y();}
js 代码
声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
时间:2007-06-06
Observer 100%是整个ajax中最为sex的一个
|
|
| 返回顶楼 | |
|
时间:2007-06-06
http://yuiblog.com/blog/2007/01/17/event-plan/
http://developer.yahoo.com/yui/docs/CustomEvent.js.html yui早就以这来设计组件了,看看yui,yui-ext充满了event. yui-ext对其进行一定的扩展. 另外dojo.connect更是用的有点走火魔了。 |
|
| 返回顶楼 | |
|
时间:2007-06-06
radar 写道 http://yuiblog.com/blog/2007/01/17/event-plan/
http://developer.yahoo.com/yui/docs/CustomEvent.js.html yui早就以这来设计组件了,看看yui,yui-ext充满了event. yui-ext对其进行一定的扩展. 另外dojo.connect更是用的有点走火魔了。 yui-ext的observable简直就是我的最爱,没办法--太sexy了 --我甚至把它应用在服务端的JS(asp) |
|
| 返回顶楼 | |
|
时间:2007-06-06
sp42 写道 radar 写道 http://yuiblog.com/blog/2007/01/17/event-plan/
http://developer.yahoo.com/yui/docs/CustomEvent.js.html yui早就以这来设计组件了,看看yui,yui-ext充满了event. yui-ext对其进行一定的扩展. 另外dojo.connect更是用的有点走火魔了。 yui-ext的observable简直就是我的最爱,没办法--太sexy了 --我甚至把它应用在服务端的JS(asp) 其实没必要把obserbable看的那么神秘高深的. 都是被java害苦的,其实对于很多动态语言来说,这不算什么. aop其实也是这样,在java,c#中,aop好象是救世主一样,在很多动态语言中,什么aop什么的,语言级别就支持了. 还有设计模式,在动态语言眼中, 尤其是在服务器端,选择太多了. 感叹一声,和我一样,生长在java,c#阳光下的coder |
|
| 返回顶楼 | |
|
时间:2007-06-06
想对自己说好好学学设计模式吧,那是思想而不是单纯的code,无论你是js java lisp 还是smalltalk。
|
|
| 返回顶楼 | |
|
时间:2007-06-06
Oh~God Bless you,guys,
--至少在AJAX时代里,还允许我们名正言顺地玩一下js.再看看一个command模式的小小实现,嘻嘻~ 先定义一个Command对象,代码如下: function Command(obj) {
var commandObj = obj; // save the reference of working object
var oldProp = new Object(); // save old properties
// set new properties and save old properties
this.Do = function() {
for (var o in this) {
oldProp[o] = commandObj[o];
commandObj[o] = this[o];
}
}
// restore old properties
this.Undo = function() {
for (var o in oldProp) {
commandObj[o] = oldProp[o];
}
delete oldProp;
oldProp = new Object();
}
}
如果要调用,这样写就可以了: // "mc" is an object that has _alpha and _x attributes var com = new Command(mc); com._alpha = 20; com._x = 200; com.Do(); // do something... // remember to save this Command somewhere... // now, undo it! com.Undo(); |
|
| 返回顶楼 | |
浏览 2542 次









