今天来介绍一下第二个模式:观察者模式。还是看源代码吧。里面有介绍
详情请点击这里:
一再强调,本人水平有限,学习这个只是无聊而已,并非达到很高的水平。还望路过的高手海涵。
请版主帮我把前面的那个装饰者模式改个标题:【设计模式】-1 装饰者模式 AS3
http://bbs.blueidea.com/thread-2836210-1-2.html
源代码也可以到作者网站下载
http://www.kenjor.com复制内容到剪贴板
代码:
//-----------------------------------------------//第一个文件 信息中心的接口
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[
本帖最后由 kenjor01 于 2008-3-17 02:46 编辑 ]