C# 設計模式(20)觀察者模式
阿新 • • 發佈:2020-12-08
觀察者模式
程式碼實現:
事件類:
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(); } }
結果: