也谈猫、老鼠、主人的观察者模式问题 在这个贴子中我利用微软在ISSUEVISION项目中的观察者模式做了测试,但是从中我也发现所有需要触发的方法都会放在同一个类中,如是多个通知类的情况下如何处理未找到相关的文章,具体还算不算是观察者模式,有点乱,大家自己看吧.

Adrian H.兄在看了我的贴子后实在看不下去我的命名规则了,所以在这次将所有类进行了重命名:)

先将类设计图放上来

Observer2

catfamily类继承了ISubject通知接口,Man与Rat实现了IObserver观察接口,这时问题就出来了当Man与Rat接收猫和老虎叫的事件时,我想分别处理其事件(再有就是当猫和老虎叫的事件进行统一处理)咱们一个个来吧.

先来公布接口:ISubject与IObserver

基础类:CatFamily,Cat,Tiger,Man,Rat

namespace LinqTest
{
    interface ISubject
    {
    }
}

     由于这次监听的是一个集合,所以IObserver在这里也发生了变化.不再是监听ISubject,而是要监听ISubject的集合列表:

namespace LinqTest
{
    interface IObserver
    {
        List<ISubject> Subject
        {
            set;
        }

    }
}
基础类:CatFamily是Cat,Tiger父类,所以当CatFamily继承了ISubject的同时Cat,Tiger也继承了ISubject接口
由于子类无法直接使用父类的方法,所以声明了一个NoticeInfo()的方法供子类调用
    abstract class CatFamily:ISubject
    {
        public abstract void Miao();
        public delegate void CatEventHandler(object source,EventArgs e);
        public event CatEventHandler CatEvent;

        public void NoticeInfo(object sender,EventArgs e) 
        {
            if (CatEvent != null)
            {
                CatEvent(sender, e);
            }
        }
    }
class Cat:CatFamily
{
    public override void Miao()
    {
        Console.WriteLine("喵~~");
        NoticeInfo(this, EventArgs.Empty);
    }
}
    class Tiger:CatFamily
    {
        public override void Miao()
        {
            Console.WriteLine("嗷~~~~~~");
            NoticeInfo(this, EventArgs.Empty);
        }
    }
posted on 2007-09-01 22:45  forrestsun  阅读(514)  评论(0编辑  收藏  举报