观察者模式-广播通知

概要:主要解决在不入侵一个对象的情况下使得对象状态改变后给其他对象通知的问题,把对象状态修改后所需要做的其他事情从当前对象解耦出去,通过一个观察者来管理。设计模式Github源码

观察者.png

观察者模式 vs 发布订阅模式

以数据状态变更为例

Notice N:被观察者,就是被通知后需要执行的逻辑

StatusChangedSubscribe:观察者

先定义两个被观察者

    public class Notice1
    {
        public int Status => 1;

        public void OnStatusChanged(int newStatus)
        {
            if (newStatus == Status)
            {
                Console.WriteLine("status 1");
            }
        }
    }

    public class Notice2
    {
        public int Status => 2;

        public void OnStatusChanged(int newStatus)
        {
            if (newStatus == Status)
            {
                Console.WriteLine("status 2");
            }
        }
    }

观察者

public class StatusChangedSubscribe
    {
        private int _currentStatus;
        public int CurrentStatus
        {
            get { return _currentStatus; }
            set
            {
                //检查值是否发生变更
                if (value != CurrentStatus)
                {
                    _currentStatus = value;

                    //非空就全部执行
                    //OnStatusChanged?.Invoke(value);
                }
            }
        }

        public Action OnStatusChanged { get; set; }
    }
        static void Main(string[] args)
        {
            while (true)
            {
                
                StatusChangedSubscribe statusChangedSubscribe = new StatusChangedSubscribe();
                Notice1 notice1 = new Notice1();
                Notice2 notice2 = new Notice2();

                statusChangedSubscribe.OnStatusChanged += notice1.OnStatusChanged;
                statusChangedSubscribe.OnStatusChanged += notice2.OnStatusChanged;
                string inputKey = Console.ReadLine();
                statusChangedSubscribe.CurrentStatus = int.Parse(inputKey);
            }
        }

你可能感兴趣的:(观察者模式-广播通知)