C# 观察者模式:一只神奇的猫

一、观察者模式,由一只猫发起一个事件。然后影响多个不同的对象(观察者)发生不同的动作反应。

包括:老鼠会跑(Mouse--Run)、狗会叫(Dog--Wang)、小偷会躲起来(Stealer--Hide)、婴儿会哭(Baby--Cry)、妈妈会说话(Mother--Whisper)等等。。。

二、新建控制台程序,建立这只神奇的猫和多个观察者对象类;

神奇猫(Cat)类

public class Cat
{
     public event Action MiaoHandler;//定义一个委托事件
        public void MiaoEvent()
        {
            Console.WriteLine("{0} MiaoEvent.....", this.GetType().Name);
            if (this.MiaoHandler != null)
            {
                foreach (Action observer in this.MiaoHandler.GetInvocationList())
                {
                    observer.Invoke();
                }
            }
        }
}

老鼠(Mouse)类

 public class Mouse 
    {
        public void Run()
        {
            Console.WriteLine("{0} Run", this.GetType().Name);
        }
    }

狗(Dog)类

public class Dog 
    {
        public void Wang()
        {
            Console.WriteLine("{0} Wang", this.GetType().Name);
        }
    }

小偷(Stealer)类

 public class Stealer 
    {
        public void Hide()
        {
            Console.WriteLine("{0} Hide", this.GetType().Name);
        }
    }

婴儿(Baby)类

public class Baby 
    {
        public void Cry()
        {
            Console.WriteLine("{0} Cry", this.GetType().Name);
        }
    }

妈妈(Mother)类

 public class Mother 
    {
        public void Whisper()
        {
            Console.WriteLine("{0} Whisper", this.GetType().Name);
        }
    }

三、上面各个类建立完成之后,程序主入口调用。

class Program
{
     static void Main(string[] args)
     {
        try
         {
            Console.WriteLine("*******************观察者模式事件委托实现*******************");

                    Cat cat = new Cat();
                    cat.MiaoHandler += new Mouse().Run;
                    cat.MiaoHandler += new Baby().Cry;
                    cat.MiaoHandler += new Dog().Wang;
                    cat.MiaoHandler += new Mother().Whisper;
                    cat.MiaoHandler += new Stealer().Hide;
                    cat.MiaoEvent();
         }
           catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            Console.Read();
     }
}


理解的不是很到位,大家有什么意见可以评论。。。。谢谢大家

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你懂的11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值