当前位置: 首页> 游戏> 手游 > <设计模式> 观察者模式

<设计模式> 观察者模式

时间:2025/7/10 4:07:21来源:https://blog.csdn.net/thisiszdy/article/details/140790251 浏览次数:0次

观察者模式

  • 模式介绍:观察者模式(Observer Pattern)是一种行为型设计模式,也被称为发布-订阅模式、模型-视图模式、源-收听者模式或从属者模式;它定义了一种一对多的依赖关系,当一个对象的状态发生改变时,其所有依赖者都会收到通知并自动更新。
  • 主要解决的问题:一个对象状态改变时,如何自动通知其他依赖对象的问题,同时保持对象间的低耦合和高协作性。
  • 关键代码:观察者列表:在主题中维护一个观察者列表。

模式结构

Subject(主题/被观察者)

  • 维护一个观察者列表。
  • 提供注册和删除观察者的方法。
  • 当状态发生变化时,向所有注册的观察者发送通知。

Observer(观察者)

  • 提供一个更新接口,以便在得到被观察者状态变化的通知时更新自己。
  • 在被观察者状态变化时接收通知,并执行相应的操作。

应用场景

  • 事件处理:如图形用户界面(GUI)框架中的按钮点击事件、窗口的打开和关闭事件等。
  • 消息通知:如聊天应用、社交媒体平台中的实时消息传递。
  • GUI开发:在图形用户界面开发中,用于处理用户与界面元素的交互事件。
  • 股票市场:股票交易所作为被观察者,股票交易员作为观察者,当股票价格、交易量等发生变化时,交易员将接收到通知。
  • 日志记录:在实时日志记录系统中,日志记录器作为被观察者,观察者可以是日志分析器、报警系统等。

代码实现(AI Code)

1、定义观察者接口(IObserver)

public interface IObserver  
{  void Update(string message);  
}

2、 定义主题接口(ISubject)

public interface ISubject  
{  void RegisterObserver(IObserver observer);  void RemoveObserver(IObserver observer);  void NotifyObservers(string message);  
}

3、实现具体主题类

using System.Collections.Generic;  public class ConcreteSubject : ISubject  
{  private List<IObserver> observers = new List<IObserver>();  public void RegisterObserver(IObserver observer)  {  if (!observers.Contains(observer))  {  observers.Add(observer);  }  }  public void RemoveObserver(IObserver observer)  {  observers.Remove(observer);  }  public void NotifyObservers(string message)  {  foreach (IObserver observer in observers)  {  observer.Update(message);  }  }  // 这里可以添加其他业务逻辑,如状态变化的方法  
}

4、实现具体观察者类

public class ConcreteObserver : IObserver  
{  private string name;  public ConcreteObserver(string name)  {  this.name = name;  }  public void Update(string message)  {  Console.WriteLine($"{name} received message: {message}");  }  
}

5、示例使用

class Program  
{  static void Main(string[] args)  {  ISubject subject = new ConcreteSubject();  IObserver observer1 = new ConcreteObserver("Observer 1");  IObserver observer2 = new ConcreteObserver("Observer 2");  IObserver observer3 = new ConcreteObserver("Observer 3");  subject.RegisterObserver(observer1);  subject.RegisterObserver(observer2);  subject.RegisterObserver(observer3);  subject.NotifyObservers("Hello, Observers!");  // 可以在此处进行其他操作,如移除观察者等  }  
}
关键字:<设计模式> 观察者模式

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: