工作中点滴记录

永远保持学徒心态

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

在论坛经常看到 观察者模式,主要以猫、老鼠、主人作为例子:
我个人理解如下:
代码如下:

namespace Test
{
    /// <summary>
    /// 定义一个委托
    /// </summary>
    public delegate void MeDelegate();
    /// <summary>
    /// 定义一个服务端抽象类
    /// </summary>
    abstract class Master
    {
        private string name;
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        /// <summary>
        /// 定义事件
        /// </summary>
        public event MeDelegate eve;
        public void Notifly()
        {
            if (eve != null)
            {
                eve();
            }
        }
        public abstract void 叫();
    }
    /// <summary>
    /// 定义一个猫类,继承于Master抽象类
    /// </summary>
    class Cat : Master
    {
        public override void 叫()
        {
            Console.WriteLine("小花猫喵喵叫!");
        }
    }
    /// <summary>
    /// 定义一个客户端抽象类
    /// </summary>
    abstract class Client
    {
        private string name;
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        public abstract void 响应();

    }
    /// <summary>
    /// 老鼠继承与客户端抽象类
    /// </summary>
    class Mouse : Client
    {
        public override void 响应()
        {
            Console.WriteLine("小老鼠逃跑");
        }
    }
    /// <summary>
    /// 人继承客户端抽象类
    /// </summary>
    class Person : Client
    {
        public override void 响应()
        {
            Console.WriteLine("主人醒来!");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Cat c = new Cat();
            Mouse m = new Mouse();
            Person p = new Person();
            //注册时间
            c.eve+=new MeDelegate(m.响应);
            c.eve+=new MeDelegate(p.响应);
            c.叫();
            //触发事件
            c.Notifly();
        }
    }
}

通过这个例子可以深刻的理解:事件是类发生被管住的事情时用来提供通知的一种方式!!!!!

posted on 2011-03-27 22:08  梦里故乡  阅读(1130)  评论(0编辑  收藏  举报