今天来介绍一下第二个模式:观察者模式。还是看源代码吧。里面有介绍 详情请点击这里:
源文件下载
//-----------------------------------------------//第一个文件 信息中心的接口 package com.dp.Observer { import com.dp.Observer.Booker; /** * @author www.kenjor.com */ public interface IMessageCenter { //订阅 参数为订阅者 function book(bo : Booker) : void; //退订 参数为订阅者 function unbook(bo : Booker) : void; //派遣、发布 function send() : void; } } //----------------------------------------------- //第二个文件 订阅者接口 package com.dp.Observer { /** * @author www.kenjor.com */ public interface IBooker { //我的信箱,邮递员投递信息的邮箱,他把信息扔到你的”updata”这个信箱里。 function update(str : String) : void; } } //------------------------------------------------ //第三个文件 订阅者 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){ //初始化时候定义用户名 _name=name; } public function update(str : String) : void { //str为收到的信息 trace(_name+"收到消息:"+str); } } } //----------------------------------------------- //第四个文件 信息发布中心 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)中不存这个订阅者(bo),就把这个订阅 //者加入到订阅者群体中 if (bookers_arr.indexOf(bo) < 0) { bookers_arr.push(bo); } ; } //退订 public function unbook(bo : Booker) : void { //在订阅者群体中找到这个订阅者,然后帮他办理退订业务 var b_index : int = bookers_arr.indexOf(bo); if(b_index >= 0) { bookers_arr.splice(b_index, 1); } } public function send() : void { //给订阅者群体中的每个订阅者发送信息(报刊) var bookers_len : Number = bookers_arr.length; for(var i : Number = 0;i < bookers_len;i++) { bookers_arr[i].update(mess); } } } } //----------------------------------------------- //第五个文件 主文件 运行它 package com.dp.Observer { import flash.display.Sprite; /** * @author www.kenjor.com */ public class Main extends Sprite { public function Main() { //实例化三个用户booker1,booker2,booker3 var booker1:Booker=new Booker("booker1"); var booker2:Booker=new Booker("booker2"); var booker3:Booker=new Booker("booker3"); //实例化一个信息中心 var messageCenter:MessageCenter=new MessageCenter(); //这三个用户需要订阅,找信息中心办理了订阅手续 messageCenter.book(booker1); messageCenter.book(booker2); messageCenter.book(booker3); //信息中心给他们发送信息; messageCenter.send(); //第一用户觉得信息没什么用,于是找信息中心办理了退订手续 messageCenter.unbook(booker1); //信息中心只给booker2,booker3发送信息了 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
经典论坛交流: http://bbs.blueidea.com/thread-2838401-1-1.html
本文链接:http://www.blueidea.com/tech/multimedia/2008/5510.asp
出处:蓝色理想
责任编辑:bluehearts
◎进入论坛RIA设计与应用版块参加讨论
|