C#创建观察者设计模式,使用了事件。以下是如何在C#中使用事件实现观察者设计模式的示例:
using System;
// 发布者接口
public interface ISubject
{
event EventHandler<string> Notify;
void DoSomething();
}
// 具体发布者类
public class ConcreteSubject : ISubject
{
public event EventHandler<string> Notify;
public void DoSomething()
{
Console.WriteLine("主题正在做某事");
Notify?.Invoke(this, "发生了某事");
}
}
// 观察者接口
public interface IObserver
{
void Update(object sender, string message);
}
// 具体观察者类
public class ConcreteObserver : IObserver
{
public void Update(object sender, string message)
{
Console.WriteLine($"观察者收到消息: {
message}");
}
}
class Program
{
static void Main()
{
// 创建发布者实例
ISubject subject = new ConcreteSubject();
// 创建观察者实例
IObserver observer1 = new ConcreteObserver();
IObserver observer2 = new ConcreteObserver();
// 订阅事件
subject.Notify += observer1.Update;
subject.Notify += observer2.Update;
// 发布者执行操作
subject.DoSomething();
Console.ReadLine();
}
}
在这个示例中,ISubject
接口定义了Notify
事件和DoSomething
方法。ConcreteSubject
类实现了ISubject
接口,并在调用DoSomething
时触发Notify
事件。
IObserver
接口定义了Update
方法,ConcreteObserver
类实现了这个接口,用于处理事件通知。
在Main
方法中,创建了ConcreteSubject
的实例,以及两个ConcreteObserver
的实例,并订阅了主题的事件。当主题的DoSomething
方法被调用时,它触发了事件并通知观察者。
当你运行这个示例时,你应该会看到如下输出:
主题正在做某事
观察者收到消息: 发生了某事
观察者收到消息: 发生了某事
这展示了在C#中使用事件实现的观察者设计模式。主题在事件发生时通知所有订阅的观察者。