美文网首页.NET
观察者模式-广播通知

观察者模式-广播通知

作者: Carson_jz | 来源:发表于2020-02-11 23:32 被阅读0次

    概要:主要解决在不入侵一个对象的情况下使得对象状态改变后给其他对象通知的问题,把对象状态修改后所需要做的其他事情从当前对象解耦出去,通过一个观察者来管理。设计模式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<int> 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);
                }
            }
    

    相关文章

      网友评论

        本文标题:观察者模式-广播通知

        本文链接:https://www.haomeiwen.com/subject/tvuoxhtx.html