• C# 设计模式(20)观察者模式


    观察者模式

    代码实现:

    事件类:

    namespace ObserverPattern.Subject
    {
        public class Cat
        {
            private readonly List<IObserver> _observerList = new List<IObserver>();
    
            public void AddObserver(IObserver observer)
            {
                _observerList.Add(observer);
            }
    
            public void RemoveObserver(IObserver observer)
            {
                _observerList.Remove(observer);
            }
    
            public void MeowObserver()
            {
                Console.WriteLine($"(Observer Mode) A cat Meow Suddenly!!");
    
                foreach (var observer in _observerList)
                {
                    observer.DoAction();
                }
            }
    
            public event Action MeowEvent;
    
            public void OnMeowEvent()
            {
                Console.WriteLine($"(Event Mode) A cat Meow Suddenly!!");
                MeowEvent?.Invoke();
            }
        }
    }

    观察者类:

        public interface IObserver
        {
           public void DoAction();
        }
       public class Mouse:IObserver
        {
            public void DoAction()
            {
                Console.WriteLine($"{this.GetType().Name} Squeak and Run");
            }
        }
        public class Dog:IObserver
        {
            public void DoAction()
            {
                Console.WriteLine($"{this.GetType().Name} Woof Woof");
            }
        }

    代码调用:

        class Program
        {
            static void Main(string[] args)
            {
                Cat cat = new Cat();
                IObserver mouse = new Mouse();
                IObserver dog = new Dog();
    
                //Observer
                Console.WriteLine("**********************************************");
                cat.AddObserver(mouse);
                cat.AddObserver(dog);
                cat.MeowObserver();
                Console.WriteLine("**********************************************");
                cat.RemoveObserver(dog);
                cat.MeowObserver();
    
                //Event
                Console.WriteLine("**********************************************");
                cat.MeowEvent += mouse.DoAction;
                cat.MeowEvent += dog.DoAction;
                cat.OnMeowEvent();
                Console.WriteLine("**********************************************");
                cat.MeowEvent -= dog.DoAction;
                cat.OnMeowEvent();
            }
        }

    结果:

  • 相关阅读:
    在 Ubuntu上使用 MySQL
    Ubuntu/CentOs 搭建SVN服务器
    一个简单的零配置命令行HTTP服务器
    Windows 环境下 NodeJs 开发 Log
    AngularJS
    thinkphp5.0使用workerman多线程实例
    bat自动备份数据库文件
    mysql.ini配置优化速度参考
    php解析识别二维码内容
    windows屏蔽windows错误报告提示框
  • 原文地址:https://www.cnblogs.com/YourDirection/p/14101695.html
Copyright © 2020-2023  润新知