C#观察者模式详解:实时通知与应用实例
147 浏览量
更新于2024-08-30
收藏 85KB PDF 举报
"C#观察者模式实例介绍"
观察者模式是一种设计模式,它定义了对象之间的一对多依赖关系,使得当一个对象(被观察者)的状态发生改变时,所有依赖于它的对象(观察者)都能得到通知并自动更新。这种模式适用于那些需要处理大量对象之间复杂交互的场景,尤其是当一个对象的变化可能会影响到多个其他对象,但具体数量不固定的情况下。
在C#中,观察者模式通常通过以下几个步骤实现:
1. 定义观察者接口:
抽象类`Observer`是观察者模式的核心,它包含了观察者的基本行为。在这个例子中,抽象方法`Update()`定义了当被观察者状态变化时观察者需要执行的操作。例如:
```csharp
abstract class Observer
{
protected string name;
protected ISubject sub;
public Observer(string name, ISubject sub)
{
this.name = name;
this.sub = sub;
}
public abstract void Update();
}
```
2. 创建具体观察者:
具体的观察者类(如`NBAObserver`和`StockObserver`)继承自`Observer`,实现`Update()`方法来响应不同的观察事件。例如,`NBAObserver`关闭NBA直播,而`StockObserver`可能执行股票相关的操作。
```csharp
// 使用面向对象的方式实现
class NBAObserver : Observer
{
// ...
public override void Update()
{
Console.WriteLine($"{sub.SubjectState} {name}关闭NBA直播,继续工作!");
}
}
class StockObserver : Observer
{
// ...
public override void Update()
{
// 实现股票操作逻辑...
}
}
```
3. 定义被观察者接口:
被观察者接口(如`ISubject`或`ISubject2`)包含状态和通知观察者的方法。这里没有直接给出,但通常包括一个`Subscribe`方法用于添加观察者,以及一个`Unsubscribe`方法用于移除观察者。当主体状态改变时,调用`NotifyObservers()`方法通知所有已订阅的观察者。
```csharp
interface ISubject
{
event Action SubjectStateChanged;
void Subscribe(Observer observer);
void Unsubscribe(Observer observer);
string SubjectState { get; set; }
}
```
4. 建立关联和通信:
在实际应用中,被观察者对象维护一个观察者列表,并在状态改变时触发`SubjectStateChanged`事件,通知所有订阅的观察者。例如:
```csharp
class Subject : ISubject
{
private List<Observer> observers = new List<Observer>();
// ...
public void NotifyObservers()
{
SubjectStateChanged?.Invoke();
}
// 添加/移除观察者
public void Subscribe(Observer observer)
{
observers.Add(observer);
}
public void Unsubscribe(Observer observer)
{
observers.Remove(observer);
}
}
```
5. 使用场景:
例如,在工作中,当老板回到办公室(主体)时,他可以调用`NotifyObservers()`,这样所有已订阅的员工(观察者)如看NBA直播的同事和看股票的同事都会收到通知,关闭他们的娱乐活动,进入工作状态。
通过C#观察者模式的实施,对象之间的依赖关系变得清晰且松耦合,当主体状态改变时,只需要维护好通知机制,就能确保所有相关观察者得到及时的更新。这在需要处理动态变化的系统中,如实时应用程序或事件驱动编程中,是非常有用的。
2018-10-15 上传
2023-05-12 上传
2009-11-09 上传
2020-12-31 上传
2020-12-31 上传
2016-06-26 上传
2014-01-09 上传
2014-07-27 上传
weixin_38673235
- 粉丝: 3
- 资源: 912
最新资源
- Unity UGUI性能优化实战:UGUI_BatchDemo示例
- Java实现小游戏飞翔的小鸟教程分享
- Ant Design 4.16.8:企业级React组件库的最新更新
- Windows下MongoDB的安装教程与步骤
- 婚庆公司响应式网站模板源码下载
- 高端旅行推荐:官网模板及移动响应式网页设计
- Java基础教程:类与接口的实现与应用
- 高级版照片排版软件功能介绍与操作指南
- 精品黑色插画设计师作品展示网页模板
- 蓝色互联网科技企业Bootstrap网站模板下载
- MQTTFX 1.7.1版:Windows平台最强Mqtt客户端体验
- 黑色摄影主题响应式网站模板设计案例
- 扁平化风格商业旅游网站模板设计
- 绿色留学H5模板:科研教育机构官网解决方案
- Linux环境下EMQX安装全流程指导
- 可爱卡通儿童APP官网模板_复古绿色动画设计