zoukankan      html  css  js  c++  java
  • 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();
            }
        }

    结果:

  • 相关阅读:
    SpringMVC(十六) 处理模型数据之SessionAttributes
    SpringBoot_web开发-【实验】-登陆&拦截器
    SpringBoot_web开发-【实验】-国际化
    SpringBoot_web开发-【实验】-引入资源
    什么是NIO?
    SpringBoot_web开发-扩展与全面接管SpringMVC
    SpringBoot_web开发-webjars&静态资源映射规则
    SpringBoot_web开发-thymeleaf语法
    SpringBoot_web开发-引入thymeleaf
    (实例)Linux 内核添加exfat驱动
  • 原文地址:https://www.cnblogs.com/YourDirection/p/14101695.html
Copyright © 2011-2022 走看看