C#上位机观察者模式
在C#中实现观察者模式(Observer Pattern)通常用于实现对象间的松耦合设计,使得当一个对象(被观察者,Subject)的状态发生变化时,所有依赖于它的对象(观察者,Observer)都能得到通知并自动更新。
观察者模式主要由两个部分组成:
主题(Subject): 维护一系列依赖于它的观察者对象,并提供添加、删除和通知观察者的接口。
**观察者(Observer):**提供一个更新接口,使得在得到通知时能更新自己。
实现步骤
1. 定义观察者接口
首先,定义一个观察者接口,该接口应包含一个更新方法。
cs
public interface IObserver
{
void Update(string message);
}
2. 定义主题接口和具体主题类
接下来,定义一个主题接口和具体的主题类,该类实现主题接口,并维护一个观察者列表。
cs
public interface ISubject
{
void Attach(IObserver observer);
void Detach(IObserver observer);
void Notify();
}
public class ConcreteSubject : ISubject
{
private List<IObserver> _observers = new List<IObserver>();
private string _state;
public void Attach(IObserver observer)
{
if (!_observers.Contains(observer))
{
_observers.Add(observer);
}
}
public void Detach(IObserver observer)
{
_observers.Remove(observer);
}
public void Notify()
{
foreach (var observer in _observers)
{
observer.Update(_state);
}
}
public void SetState(string state)
{
_state = state;
Notify(); // 当状态改变时通知所有观察者
}
}
3. 实现观察者类
定义具体的观察者类,实现IObserver接口。
cs
public class ConcreteObserver : IObserver
{
private string _observerState;
private string _name;
public ConcreteObserver(string name)
{
this._name = name;
}
public void Update(string message)
{
_observerState = message; // 更新观察者的状态或执行某些操作基于新的状态信息
Console.WriteLine($"Observer {_name} received update: {_observerState}");
}
}
4. 使用观察者模式
最后,创建主题和观察者对象,并将观察者附加到主题上,然后改变主题的状态来触发通知。
cs
class Program
{
static void Main(string[] args)
{
ISubject subject = new ConcreteSubject();
IObserver observer1 = new ConcreteObserver("Observer1");
IObserver observer2 = new ConcreteObserver("Observer2");
IObserver observer3 = new ConcreteObserver("Observer3");
subject.Attach(observer1);
subject.Attach(observer2);
subject.Attach(observer3); // 将观察者附加到主题上
subject.SetState("New State"); // 改变状态,通知所有观察者更新状态信息。
}
}
在这个例子中,每当ConcreteSubject的状态改变时,所有附加到它的ConcreteObserver对象都会收到通知并更新它们的状态。这样就实现了观察者模式。