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

    结果:

  • 相关阅读:
    oracle中Blob和Clob类型的区别
    为什么要分库分表
    Enable file editing in Visual Studio's debug mode
    SQL Server Dead Lock Log
    Debug .NET Framework Source
    SQL Server text field里面有换行符的时候copy到excel数据会散乱
    诊断和修复Web测试记录器(Web Test Recorder)问题
    Can't load Microsoft.ReportViewer.ProcessingObjectModel.dll
    'telnet' is not recognized as an internal or external command
    Linq to XML
  • 原文地址:https://www.cnblogs.com/YourDirection/p/14101695.html
Copyright © 2011-2022 走看看