观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
示例代码:
// 主题接口
public interface ISubject
{
void RegisterObserver(IObserver o);
void RemoveObserver(IObserver o);
void NotifyObservers();
}
// 观察者接口
public interface IObserver
{
void Update(string message);
}
// 具体主题
public class ConcreteSubject : ISubject
{
private List<IObserver> _observers = new List<IObserver>();
private string _state;
public void RegisterObserver(IObserver o)
{
_observers.Add(o);
}
public void RemoveObserver(IObserver o)
{
_observers.Remove(o);
}
public void NotifyObservers()
{
foreach (var observer in _observers)
{
observer.Update(_state);
}
}
public void SetState(string state)
{
_state = state;
NotifyObservers();
}
}
// 具体观察者
public class ConcreteObserver : IObserver
{
private string _name;
public ConcreteObserver(string name)
{
_name = name;
}
public void Update(string message)
{
Console.WriteLine($"{_name} received: {message}");
}
}
// 客户端代码
class Program
{
static void Main(string[] args)
{
var subject = new ConcreteSubject();
subject.RegisterObserver(new ConcreteObserver("Observer1"));
subject.RegisterObserver(new ConcreteObserver("Observer2"));
subject.SetState("Hello, Observers!");
}
}