这次来实现老鼠类
class Rat:IObserver
{
public List<ISubject> Subject
{
set
{
var _tiger = (Tiger)value.Where(getTiger => getTiger is Tiger).First();
//_tiger =(Tiger) value.FindAll(getTiger => getTiger is Tiger).First();
_tiger.CatEvent += new CatFamily.CatEventHandler(_tiger_CatEvent);
var _cat = (Cat)value.Where(getCat => getCat is Cat).First();
//_cat =(Cat) value.FindAll(getCat => getCat is Cat).First();
_cat.CatEvent += new CatFamily.CatEventHandler(_cat_CatEvent);
}
}
void _cat_CatEvent(object source, EventArgs e)
{
Console.WriteLine("猫来了,跑啊
.");
}
void _tiger_CatEvent(object source, EventArgs e)
{
Console.WriteLine("大猫来了,跑啊
.");
}
}
{
public List<ISubject> Subject
{
set
{
var _tiger = (Tiger)value.Where(getTiger => getTiger is Tiger).First();
//_tiger =(Tiger) value.FindAll(getTiger => getTiger is Tiger).First();
_tiger.CatEvent += new CatFamily.CatEventHandler(_tiger_CatEvent);
var _cat = (Cat)value.Where(getCat => getCat is Cat).First();
//_cat =(Cat) value.FindAll(getCat => getCat is Cat).First();
_cat.CatEvent += new CatFamily.CatEventHandler(_cat_CatEvent);
}
}
void _cat_CatEvent(object source, EventArgs e)
{
Console.WriteLine("猫来了,跑啊
![](https://www.cnblogs.com/Images/dot.gif)
}
void _tiger_CatEvent(object source, EventArgs e)
{
Console.WriteLine("大猫来了,跑啊
![](https://www.cnblogs.com/Images/dot.gif)
}
}
对类的查询采用的是上次写的贴子通过猫和老鼠学习.net3.0新特性(Lambda)(2)中总结的方法
如果是想集中处理cat与tiger的事件是只要在set{}里改改就好,Man类基本与RAT一样,没什么好解释的,贴出代码如下:
class Man:IObserver
{
public List<ISubject> Subject
{
set
{
var _tiger = (Tiger)value.Where(getTiger => getTiger is Tiger).First();
//_tiger =(Tiger) value.FindAll(getTiger => getTiger is Tiger).First();
_tiger.CatEvent += new CatFamily.CatEventHandler(_tiger_CatEvent);
var _cat = (Cat)value.Where(getCat => getCat is Cat).First();
//_cat =(Cat) value.FindAll(getCat => getCat is Cat).First();
_cat.CatEvent += new CatFamily.CatEventHandler(_cat_CatEvent);
}
}
void _cat_CatEvent(object source, EventArgs e)
{
Console.WriteLine("主人被吵醒");
}
void _tiger_CatEvent(object source, EventArgs e)
{
Console.WriteLine("Hello Kitty,乖~~~~");
}
}
主程序与原来发的贴子变动不大,也没什么好说的class Program
{
static void Main(string[] args)
{
//实现CatFamily的LIST泛型
var _cat = new Cat();
var _tiger = new Tiger();
var lstCats =new List<ISubject>(){ _cat, _tiger };
var _rat = new Rat();
_rat.Subject = lstCats;
var _man = new Man();
_man.Subject = lstCats;
_cat.Miao();
_tiger.Miao();
}
}
呵呵,全部代码就是这样了。当我实现完后,有点晕。不知道这还是不是原来的观察者模式,但我确实实现了通知与观察目的。
希望在这里起到个抛砖引玉的作用:)
源码下载