观察者模式

    xiaoxiao2021-03-26  28

    也称作发布/订阅模式,观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己  /// <summary>     /// 抽象主题类     /// </summary>     public abstract class Subject     {         private IList<Observer> observers = new List<Observer>();         /// <summary>         /// 增加观察者         /// </summary>         /// <param name="observer"></param>         public void Attach(Observer observer)         {             observers.Add(observer);         }         /// <summary>         /// 移除观察者         /// </summary>         /// <param name="observer"></param>         public void Detach(Observer observer)         {             observers.Remove(observer);         }         /// <summary>         /// 向观察者(们)发出通知         /// </summary>         public void Notify()         {             foreach (Observer o in observers)             {                 o.Update();             }         }     }     /// <summary>     /// 抽象观察者类,为所有具体观察者定义一个接口,在得到通知时更新自己     /// </summary>     public abstract class Observer     {         public abstract void Update();     }     /// <summary>     /// 具体观察者或具体通知者,将有关状态存入具体观察者对象;在具体主题的内部状态改变时,给所有登记过的观察者发出通知。具体主题角色通常用一个具体子类实现。     /// </summary>     public class ConcreteSubject : Subject     {         private string subjectState;         /// <summary>         /// 具体观察者的状态         /// </summary>         public string SubjectState         {             get { return subjectState; }             set { subjectState = value; }         }     }     /// <summary>     /// 具体观察者,实现抽象观察者角色所要求的更新接口,已是本身状态与主题状态相协调     /// </summary>     public class ConcreteObserver : Observer     {         private string observerState;         private string name;         private ConcreteSubject subject;         /// <summary>         /// 具体观察者用一个具体主题来实现         /// </summary>         public ConcreteSubject Subject         {             get { return subject; }             set { subject = value; }         }         public ConcreteObserver(ConcreteSubject subject, string name)         {             this.subject = subject;             this.name = name;         }         /// <summary>         /// 实现抽象观察者中的更新操作         /// </summary>         public override void Update()         {             observerState = subject.SubjectState;             Console.WriteLine("The observer's state of {0} is {1}", name, observerState);         }     }
    转载请注明原文地址: https://ju.6miu.com/read-662628.html

    最新回复(0)