事件委託發佈-訂閱

發佈器(publisher) 是一個包含事件和委託定義的對象。事件和委託之間的聯繫也定義在這個對象中。發佈器(publisher)類的對象調用這個事件,並通知其他的對象。

訂閱器(subscriber) 是一個接受事件並提供事件處理程序的對象。在發佈器(publisher)類中的委託調用訂閱器(subscriber)類中的方法(事件處理程序)。

   /// <summary>
    /// 抽象類
    /// </summary>
    public abstract class EatFood
    {

        private Mom mom;

        public EatFood(Mom _mom)
        {
            mom = _mom;
            mom.Eat += Mom_Eat;
        }

        public abstract void Mom_Eat();
    }
   /// <summary>
    /// 發佈者
    /// </summary>
    public class Mom
    {
        //定義Eat事件,用於發佈喫飯消息
        public event Action Eat;

        public void Cook()
        {
            Console.WriteLine("媽媽 : 飯好了");
            //飯好了,發佈喫飯消息
            Eat?.Invoke();
        }
    }

    /// <summary>
    /// 訂閱者
    /// </summary>
    public class Dad : EatFood
    {
        public Dad(Mom mom) : base(mom)
        {
            //爸爸去喫飯
            Console.WriteLine("爸爸訂閱了媽媽煮好飯的消息");
        }

        public override void Mom_Eat()
        {
            //爸爸去喫飯
            Console.WriteLine("爸爸 : 喫飯了。");
        }
    }

    /// <summary>
    /// 訂閱者
    /// </summary>
    public class Child : EatFood
    {
        public Child(Mom mom) : base(mom)
        {
            //爸爸去喫飯
            Console.WriteLine("孩子訂閱了媽媽煮好飯的消息");
        }


        public override void Mom_Eat()
        {
            //熊孩子LOL呢,打完再喫
            Console.WriteLine("孩子 : 打完這局再喫。");
        }
    }

  

Mom mom = new Mom();

Dad dad = new Dad(mom);
Child child = new Child(mom);

mom.Cook();

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章