event-delegate经典例子(猫叫)

上一次说过经典面试题:
"猫叫,老鼠跑,主人惊醒"
在观察者模式下的实现时,提到该题还可通过"事件-委托"来实现.下面给出代码(摘录)
public   delegate   void  CryEventHandler();
    
// step1 抽象事件引发者(猫)类,引发CryEventHandler类型的事件
     public   abstract   class  Subject
    {
        
public   event  CryEventHandler CryEvent;
        
protected   void  FireEvent()   // 不需要被子类实现
        {
            
if (CryEvent != null )
            {
                
this .CryEvent();
            }
        }
    }
    
// 实现猫类,并通过Cry方法引发事件
     public   class  Cat:Subject
    {
        
public   void  Cry()
        {
            Console.WriteLine(
" Cat Cryed! " );
            
this .FireEvent();
        }
    }
    
// 抽象观察者基类
     public   abstract   class  Observer
    {
        
public  Observer(Subject sub)
        {
            sub.CryEvent
+= new  CryEventHandler( this .Response);
        }
        
public   abstract   void  Response();
    }
    
// 实现老鼠/主人
     public   class  Mouse:Observer
    {
        
private   string  name;
        
public  Mouse( string  name,Subject sub): base (sub)
        {
            
this .name = name;
        }
        
public   override   void   Response()
        {
            Console.WriteLine(
" Cat Cryed! " + name + "  Run! " );
        }
    }
     
public   class  Master:Observer
    {
        
private   string  name;
        
public  Master( string  name,Subject sub): base (sub)
        {
            
this .name = name;
        }
        
public   override   void   Response()
        {
            Console.WriteLine(
" Cat Cryed! " + name + "  WeakUP! " );
        }
    }

转载于:https://www.cnblogs.com/McJeremy/archive/2008/09/04/1283687.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值