也谈猫、老鼠、主人的观察者模式问题 在这个贴子中我利用微软在ISSUEVISION项目中的观察者模式做了测试,但是从中我也发现所有需要触发的方法都会放在同一个类中,如是多个通知类的情况下如何处理未找到相关的文章,具体还算不算是观察者模式,有点乱,大家自己看吧.
Adrian H.兄在看了我的贴子后实在看不下去我的命名规则了,所以在这次将所有类进行了重命名:)
先将类设计图放上来
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); } }