外贸建站的公司,易网网站,wordpress同步至订阅号,外贸建站系统源码观察者模式是一种软件设计模式#xff0c;当一个对象的状态发生变化时#xff0c;其所有依赖者都会自动得到通知。 观察者模式也被称为“发布-订阅”模式#xff0c;它定义了对象之间的一对多的依赖性#xff0c;当一个对象状态改变时#xff0c;所有依赖于它的对象都会得… 观察者模式是一种软件设计模式当一个对象的状态发生变化时其所有依赖者都会自动得到通知。 观察者模式也被称为“发布-订阅”模式它定义了对象之间的一对多的依赖性当一个对象状态改变时所有依赖于它的对象都会得到通知并进行更新。观察者模式通常用于实现事件机制一个对象触发自己的一个事件也就是改变自己的状态然后通知其他的一切依赖于它的对象。 在观察者模式中主要有两种角色
主题Subject它是被观察的对象。当主题的状态发生改变时会通知所有已注册的观察者。观察者Observer它是依赖于主题的对象当接到主题的通知时会更新自己的状态。 观察者模式的主要优点是它支持动态的关联一个系统对象的行为依赖于另一个系统对象的状态。并且它是一种松耦合的设计模式一个主题不必知道其任何观察者例如观察者的具体类。 观察者模式广泛应用于各种编程语言的库和框架中例如在.NET中它被用于实现事件模型。 然而观察者模式也有一些缺点。例如如果一个主题有大量的直接和间接的观察者将会花费大量的时间来通知所有的观察者。另外如果观察者和主题之间存在循环依赖可能会导致系统行为的不确定性。 以下是一个基本的观察者模式的实现 首先我们定义一个IObserver接口和一个ISubject接口
public interface IObserver
{void Update(string message);
}public interface ISubject
{void RegisterObserver(IObserver observer);void RemoveObserver(IObserver observer);void NotifyObservers(string message);
}然后我们实现一个具体的主题Subject
public class Subject : ISubject
{private ListIObserver observers new ListIObserver();public void RegisterObserver(IObserver observer){observers.Add(observer);}public void RemoveObserver(IObserver observer){if (observers.Contains(observer)){observers.Remove(observer);}}public void NotifyObservers(string message){foreach (var observer in observers){observer.Update(message);}}
}接下来我们实现一个具体的观察者Observer
public class Observer : IObserver
{private string name;public Observer(string name){this.name name;}public void Update(string message){Console.WriteLine(${name} received: {message});}
}最后我们可以创建一个主题和多个观察者并将观察者注册到主题上
namespace ObserverMode
{internal class Program{static void Main(string[] args){Console.WriteLine(测试C#单例模式);ISubject subject new Subject();IObserver observer1 new Observer(Observer1);IObserver observer2 new Observer(Observer2);subject.RegisterObserver(observer1);subject.RegisterObserver(observer2);subject.NotifyObservers(Hello, observers!);}}
}运行结果 在这个例子中当我们调用NotifyObservers方法时注册到subject的所有观察者都会得到通知并调用它们的Update方法。