10分鐘讓你完全理解觀察者模式 版本二

atliwen發表於2015-09-28
class Program
    {
        static void Main(string[] args)
        {
            // 事件源  
            Student student = new Student("美女"); 
            // 執行的事件
            student.Sleep();
            // 執行的時間
            student.Bathe();
            // 註冊監聽器
            student.SetStudentListener(new MyStudent()); 

        }
    }

    /// <summary>
    ///  事件源
    /// </summary>
    public class Student
    {
        public string Name { get; set; }
        // 事件介面 
        private IStudentListener _interface;

        public Student(string name)
        {
            this.Name = name;
        }
        public void Sleep()
        {
            Console.WriteLine(Name + " 睡覺了 ");
        } 
        public void Bathe()
        {
            if (_interface != null) 
                _interface.Bathe(new EventObject(this)); 
            Console.WriteLine(Name + " 在洗澡 ");
        } 
        public void SetStudentListener(IStudentListener iListener)
        {
            this._interface = iListener;
        } 
    }

    /// <summary>
    /// 介面
    /// </summary>
    public interface IStudentListener
    {  // 監聽的事件
        void Bathe(EventObject e);
    }

    /// <summary>
    ///  事件源   只是負責將處罰事件的物件經行傳遞過來
    /// </summary>
    public class EventObject
    { 
        private object _eOobj; 

        public EventObject(object o)
        {
            _eOobj = o;
        } 
        public object GetObject()
        {
            return _eOobj;
        } 
    }

    /// <summary>
    /// 監聽者
    /// </summary>
    public class MyStudent : IStudentListener
    { 
        public void Bathe(EventObject e)
        {
            Student student = (Student)e.GetObject();
            Console.WriteLine(student.Name+" 洗澡中 ");
        }
    }

 

 附加圖解 :

自己胡亂花的  方便初學者 看而已    這種模式 一個事件 只能有一個監聽者啊   一個動作 只能被一個人得知 。

我加上 委託事件 再來搞搞

 

相關文章