c# - events 观察者模式

using System;

namespace EventsDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Cat cat = new Cat() {  Name = "Tom" };
            Mouse mouse1 = new Mouse(cat) { Name = "Jerry" };
            Mouse mouse2 = new Mouse(cat) { Name = "Thomas" };

            mouse1.Eat();
            mouse2.Eat();

            cat.Meow();
        }
    }

    public class Cat
    {
        public event EventHandler OnMeow;

        public string Name { get; set; }

        public void Sleep()
        {
            Console.WriteLine("Cat:" + this.Name + " is sleeping...");
        }

        public void Meow()
        {
            Console.WriteLine("Cat:" + this.Name + " is Meowing...");

            if (OnMeow != null)
                OnMeow(this, new MeowArg() { Name = this.Name });
        }
    }

    public class MeowArg : EventArgs
    {
        public string Name { get; set; }
    }

    public class Mouse
    {
        private Cat CatToWatch { get; set; }
        public Mouse(Cat cat)
        {
            CatToWatch = cat;
            CatToWatch.OnMeow += CatToWatch_OnMeow;
        }

        private void CatToWatch_OnMeow(object sender, EventArgs e)
        {
            RunAway((e as MeowArg).Name);
        }

        public string Name { get; set; }
        public void Eat()
        {
            Console.WriteLine("Mouse:" + this.Name + " is eating...");
        }

        private void RunAway(string catName)
        {
            Console.WriteLine("Cat:" + catName + " meows, mouse:" + this.Name + " run away...");
        }
    }
}
发布了130 篇原创文章 · 获赞 20 · 访问量 30万+

猜你喜欢

转载自blog.csdn.net/yuxuac/article/details/103236605