今天來介紹一下第二個(gè)模式:觀察者模式。還是看源代碼吧。里面有介紹 詳情請點(diǎn)擊這里:
源文件下載
//-----------------------------------------------//第一個(gè)文件 信息中心的接口 package com.dp.Observer { import com.dp.Observer.Booker; /** * @author www.kenjor.com */ public interface IMessageCenter { //訂閱 參數(shù)為訂閱者 function book(bo : Booker) : void; //退訂 參數(shù)為訂閱者 function unbook(bo : Booker) : void; //派遣、發(fā)布 function send() : void; } } //----------------------------------------------- //第二個(gè)文件 訂閱者接口 package com.dp.Observer { /** * @author www.kenjor.com */ public interface IBooker { //我的信箱,郵遞員投遞信息的郵箱,他把信息扔到你的”updata”這個(gè)信箱里。 function update(str : String) : void; } } //------------------------------------------------ //第三個(gè)文件 訂閱者 package com.dp.Observer { import com.dp.Observer.IBooker; /** * @author www.kenjor.com */ public class Booker implements IBooker { //訂閱者的用戶名 private var _name:String; public function Booker(name:String){ //初始化時(shí)候定義用戶名 _name=name; } public function update(str : String) : void { //str為收到的信息 trace(_name+"收到消息:"+str); } } } //----------------------------------------------- //第四個(gè)文件 信息發(fā)布中心 package com.dp.Observer { import com.dp.Observer.IMessageCenter; /** * @author www.kenjor.com */ public class MessageCenter implements IMessageCenter { private var mess : String = new String("message from messageCenter"); private var bookers_arr : Array = new Array(); public function MessageCenter() { } //訂閱 public function book(bo : Booker) : void { //如果在訂閱者群體(bookers_arr)中不存這個(gè)訂閱者(bo),就把這個(gè)訂閱 //者加入到訂閱者群體中 if (bookers_arr.indexOf(bo) < 0) { bookers_arr.push(bo); } ; } //退訂 public function unbook(bo : Booker) : void { //在訂閱者群體中找到這個(gè)訂閱者,然后幫他辦理退訂業(yè)務(wù) var b_index : int = bookers_arr.indexOf(bo); if(b_index >= 0) { bookers_arr.splice(b_index, 1); } } public function send() : void { //給訂閱者群體中的每個(gè)訂閱者發(fā)送信息(報(bào)刊) var bookers_len : Number = bookers_arr.length; for(var i : Number = 0;i < bookers_len;i++) { bookers_arr[i].update(mess); } } } } //----------------------------------------------- //第五個(gè)文件 主文件 運(yùn)行它 package com.dp.Observer { import flash.display.Sprite; /** * @author www.kenjor.com */ public class Main extends Sprite { public function Main() { //實(shí)例化三個(gè)用戶booker1,booker2,booker3 var booker1:Booker=new Booker("booker1"); var booker2:Booker=new Booker("booker2"); var booker3:Booker=new Booker("booker3"); //實(shí)例化一個(gè)信息中心 var messageCenter:MessageCenter=new MessageCenter(); //這三個(gè)用戶需要訂閱,找信息中心辦理了訂閱手續(xù) messageCenter.book(booker1); messageCenter.book(booker2); messageCenter.book(booker3); //信息中心給他們發(fā)送信息; messageCenter.send(); //第一用戶覺得信息沒什么用,于是找信息中心辦理了退訂手續(xù) messageCenter.unbook(booker1); //信息中心只給booker2,booker3發(fā)送信息了 messageCenter.send(); } } }
輸出:
[trace] booker1收到消息:message from messageCenter [trace] booker2收到消息:message from messageCenter [trace] booker3收到消息:message from messageCenter [trace] booker2收到消息:message from messageCenter [trace] booker3收到消息:message from messageCenter
經(jīng)典論壇交流: http://bbs.blueidea.com/thread-2838401-1-1.html
本文鏈接:http://www.95time.cn/tech/multimedia/2008/5510.asp
出處:藍(lán)色理想
責(zé)任編輯:bluehearts
◎進(jìn)入論壇RIA設(shè)計(jì)與應(yīng)用版塊參加討論
|