觀察者模式

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 觀察者模式
{
    class Program
    {
        static void Main(string[] args)
        {
            看NBA的同事 zhangSan = new 看NBA的同事() { Name = "張三" };
            看NBA的同事 li = new 看NBA的同事()
            {
                Name = "李四"
            };
            看NBA的同事 ww = new 看NBA的同事() { Name = "王五" };
            打遊戲 xiaoWu = new 打遊戲() { Name = "小五" };

            老闆 xiaoLi = new 老闆();

            xiaoLi.註冊(zhangSan);
            xiaoLi.註冊(li);
            xiaoLi.註冊(ww);
            xiaoLi.註冊(xiaoWu);

            xiaoLi.取消註冊(li);
            xiaoLi.通知();

            Console.ReadLine();
        }
    }

    public abstract class 被觀察者
    {
        public List<觀察者> list = new List<觀察者>();

        public abstract void 註冊(觀察者 ts);
        public abstract void 取消註冊(觀察者 ts);
        public abstract void 通知();
    }

    public class 前臺 : 被觀察者
    {


        public override void 註冊(觀察者 ts)
        {
            list.Add(ts);
        }

        public override void 取消註冊(觀察者 ts)
        {
            list.Remove(ts);
        }

        public override void 通知()
        {
            Console.WriteLine("老闆來了....");
            foreach (觀察者 item in list)
            {
                item.更新();
            }
        }
    }


    public class 老闆 : 被觀察者
    {

        public override void 註冊(觀察者 ts)
        {
            list.Add(ts);
        }

        public override void 取消註冊(觀察者 ts)
        {
            list.Remove(ts);
        }

        public override void 通知()
        {
            Console.WriteLine("同志們,我回來了....");
            foreach (觀察者 item in list)
            {
                item.更新();
            }
        }
    }

    public abstract class 觀察者
    {
        public string Name { get; set; }
        public abstract void 更新();
    }

    public class 看NBA的同事 : 觀察者
    {

        public override void 更新()
        {
            Console.WriteLine(Name + " 關掉NBA,開始工作......");
        }
    }

    public class 打遊戲 : 觀察者
    {

        public override void 更新()
        {
            Console.WriteLine(Name + " 關掉遊戲,開始工作。。。。");
        }
    }
}


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