The
observer pattern (a subset of the asynchronous
publish/subscribe
pattern) is a software
design pattern in which an object,
called the subject, maintains a list of its dependents, called observers, and
notifies them automatically of any state changes, usually by calling one of
their methods. It is
mainly used to implement distributed event handling systems.
Many times, i saw the observer word. For example, in extjs there is a
Ext.util.Observable class.
Abstract base class that provides a common interface for publishing events.
Subclasses are expected to to have a property “events” with all the events
defined.
I look at the code and find something like this:
Ext.util.Observable = function() { };
Ext.util.Observable.prototype = (function() {
return {
addListener : function(eventName, fn, scope, o){
},
removeListener : function(eventName, fn, scope){
}
};
})();
Seems it just an abstract class to maintain functions relation to
events.
I didn’t understand the inside logic of observer until i saw this
article.
It’s about new feature of ASP.NET4.0 AJAX PREVIEW - JavaScript
Observer Pattern, implemented in Sys.Observer.
First, there is an old-plain javascript object:
var latestPost = {title:"JavaScript Observer Patter", url:"..."};
function initComponent() {
$("").attr("href", latestPost.url).html(latestPost.title).appendTo("body");
}
We use this object to create a hyperlink in the DOM.
Second, After a
period of time, we retrieve the latest post from server and update latestPost
object. The question is how to notify the iniComponent function to execute
again?
With the help of Sys.Observer in ASP.NET 4.0 AJAX PREVIEW:
Sys.Observer.makeObservable(latestPost);
Sys.Observer.addPropertyChanged(latestPost, iniComponent);
latestPost.beginUpdate();
latestPost.setValue("title", "I want an iphone.");
latestPost.endUpdate();
When you call the endUpdate function, the function iniComponent registered in
lastedPost object has to be execute again.
You see, the Sys.Observer’s logic should not much complex, which manage
event callbacks and add some functions to the plain-old object. When the
functions are called, just trigger the callbacks.
It’s clear - Observer, right?