这次来实现老鼠类

 

    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(
"大猫来了,跑啊."
);
        }
    }


对类的查询采用的是上次写的贴子通过猫和老鼠学习.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();
        }
    }    




 呵呵,全部代码就是这样了。当我实现完后,有点晕。不知道这还是不是原来的观察者模式,但我确实实现了通知与观察目的。

希望在这里起到个抛砖引玉的作用:)

源码下载
posted on 2007-09-01 22:55  forrestsun  阅读(433)  评论(0编辑  收藏  举报