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();
            }
        }

    结果:

  • 相关阅读:
    JDK集合框架--LinkedList
    JDK集合框架--ArrayList
    JDK集合框架--综述
    JDK常用类解读--StringBuffer、StringBuilder
    JDK常用类解读--String
    【spring 注解驱动开发】扩展原理
    【spring 注解驱动开发】spring事务处理原理
    【spring 注解驱动开发】Spring AOP原理
    【spring 注解驱动开发】spring自动装配
    【spring 注解驱动开发】spring对象的生命周期
  • 原文地址:https://www.cnblogs.com/YourDirection/p/14101695.html
Copyright © 2011-2022 走看看