[AS3]观察者模式(基本版)

创建日期:2008年3月19日 来自:蓝色理想 浏览:405次 作者:匿名
今天来介绍一下第二个模式:观察者模式。还是看源代码吧。里面有介绍
详情请点击这里:

源文件下载

//-----------------------------------------------//第一个文件  信息中心的接口
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


责编:yezi
相关搜索: [AS3]观察者模式(基本版)  
Google
嗷嗷毙技术网版权申明:大家可以自由转载我站点的文章,但原作者和来自我站的链接必须保留(非我站原创的,按照原来链接,自行链接)。文章版权归作者所有。
特别注意:本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有,文章若有侵犯作者版权,请与我们联系,我们将立即删除修改。
搜索 
Google