用C#编写观察者设计模式
观察者模式是一种行为型设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,当主题对象发生变化时,它的所有依赖者(观察者)都会收到通知并更新自己的状态。
下面是用C#实现观察者模式的示例代码:
// 主题接口 public interface ISubject { void Attach(IObserver observer); // 注册观察者 void Detach(IObserver observer); // 移除观察者 void Notify(); // 通知所有观察者 }
// 观察者接口 public interface IObserver { void Update(ISubject subject); // 更新观察者状态 }
// 具体主题类
public class ConcreteSubject : ISubject
{
private List
public int State
{
get { return state; }
set
{
state = value;
Notify(); // 状态变化时通知所有观察者
}
}
public void Attach(IObserver observer)
{
observers.Add(observer);
}
public void Detach(IObserver observer)
{
observers.Remove(observer);
}
public void Notify()
{
foreach (IObserver observer in observers)
{
observer.Update(this);
}
}
}
// 具体观察者类 public class ConcreteObserver : IObserver { private int observerState;
public void Update(ISubject subject)
{
ConcreteSubject concreteSubject = (ConcreteSubject)subject;
observerState = concreteSubject.State;
Console.WriteLine("观察者状态已更新为:" + observerState);
}
}
// 测试代码 public class TestObserverPattern { public static void Main(string[] args) { ConcreteSubject subject = new ConcreteSubject(); ConcreteObserver observer1 = new ConcreteObserver(); ConcreteObserver observer2 = new ConcreteObserver();
subject.Attach(observer1);
subject.Attach(observer2);
subject.State = 123;
subject.Detach(observer2);
subject.State = 456;
}
}
运行上面的测试代码,输出结果如下:
观察者状态已更新为:123 观察者状态已更新为:123 观察者状态已更新为:456
可以看到,当主题对象ConcreteSubject的状态发生变化时,所有注册的观察者对象都会收到通知并更新自己的状态。
原文地址: https://www.cveoy.top/t/topic/rk0 著作权归作者所有。请勿转载和采集!