eventdelegate经典例子(猫叫)

上一次说过经典面试题:
"猫叫,老鼠跑,主人惊醒"
在观察者模式下的实现时,提到该题还可通过"事件-委托"来实现.下面给出代码(摘录)
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/p/1283687.html