在園裡有許多牛人都已經寫過這些文章,不過大多的例子都是.NET,今天我要舉一個JS的使用執行個體.有興趣的朋友可以先瞭解一下一些牛人的,比如李會軍大哥設計模式篇中觀察者的那一節
http://www.cnblogs.com/Terrylee/archive/2006/10/23/Observer_Pattern.html
說說我自己對這模式的理解,其思想核心是:每個被觀察對象都依據對象資料的改變而改變,被觀察對象一定要有同樣的改變行為來約束,這個約束是被觀察對象提供給觀察器的統一介面。觀察器會開發改變資料的行為。
JS是弱類型的指令碼,很多東西都要約定的,不象.NET會有介面的約束,廢話不多說,我們直接看執行個體:
觀察者執行個體 複製代碼 代碼如下:var ObserverObj = { /**//*依賴對象*/
FirstName: "Max",
LastName: "Gan",
Id: 1
}
var ObserverManager = { /**//*觀察器*/
Observers:[], /**//*觀察對象集*/
AddObserver: function(item){/**//*加入觀察對象*/
this.Observers.push(item);
},
Change: function(obj){ /**//*改變對象行為*/
for(var item in obj){
ObserverObj[item] = obj[item];
}//改變資料依賴對象資料
for(var i = 0,len = this.Observers.length; i < len; i++){
var item = this.Observers[i];
item.Display(); //對象改變後,改變觀察對象的行為Display; 為統一的介面
}
}
}
var Header = function(){ /**//*觀察對象Header*/
this.Display = function(){
alert(ObserverObj.FirstName);
}
}
var Content = function(){ /**//*觀察對象Content*/
this.Display = function(){
alert(ObserverObj.LastName);
}
}
var Foot = function(){ /**//*觀察對象Foot*/
this.Display = function(){
alert(ObserverObj.Id);
}
}
上面的例子ObserverManager只提供了綁定的方法(AddObserver),其他的什麼取消綁定啊之類的代碼技巧,可能大家想一下就知道了.其實這些代碼的最終目的就是當改變了Observers資料,其他的被對象也會根據資料的改變作出相應的回應.OK,現在我們把他們綁定一下. 複製代碼 代碼如下:/***綁定觀察器動作***/
ObserverManager.AddObserver(new Header());
ObserverManager.AddObserver(new Content());
ObserverManager.AddObserver(new Foot());
最後我們使用會怎麼使用呢?(一個低能的問題...呵呵)看例子.
使用方法 複製代碼 代碼如下:<!--使用方法-->
<a href="javascript://" onclick="ObserverManager.Change({FirstName:'老婆'});">改變FirstName</a>
<a href="javascript://" onclick="ObserverManager.Change({LastName:'是母老虎'});">改變LastName</a>
<a href="javascript://" onclick="ObserverManager.Change({Id:2});">改變Id</a>
我把整個例子都附上了,有興趣的朋友可以下載來看看.
Javascript觀察者模式.rar
一個人能夠走多遠,取決於與誰同行