2023-03-20
设计模式
00
请注意,本文编写于 348 天前,最后修改于 348 天前,其中某些信息可能已经过时。

目录

引言
观察者
被观察者
结论

引言

观察者模式是一种行为型设计模式,它允许对象之间建立一种一对多的关系,使得当一个对象状态改变时,所有依赖它的对象都能够自动得到通知并更新自己的状态。该模式可以帮助我们实现松耦合的系统,以便更好地应对变化和扩展。

在观察者模式中,有两个角色:观察者被观察者。被观察者负责维护观察者列表,并在状态发生改变时通知观察者;观察者则负责接收被观察者的通知并进行相应的处理。

下面我们通过一个简单的例子来说明观察者模式的用法。假设我们要实现一个计数器,每次计数器增加时需要通知所有的观察者。

观察者

先定义一个接口IObserver,用于定义观察者的行为,该接口只有一个方法Update,用于接收被观察者的通知并更新观察者的状态。

csharp
public interface IObserver { void Update(int count); }

再定义一个观察者实现ConsoleObserver,它负责在控制台上输出计数器的值。

csharp
public class ConsoleObserver : IObserver { public void Update(int count) { Console.WriteLine($"Count = {count}"); } }

被观察者

定义一个被观察者Counter,它负责维护观察者列表,并在计数器增加时通知观察者。

csharp
public class Counter { private int count = 0; private List<IObserver> observers = new List<IObserver>(); public void AddObserver(IObserver observer) { observers.Add(observer); } public void RemoveObserver(IObserver observer) { observers.Remove(observer); } public void Increment() { count++; NotifyObservers(); } private void NotifyObservers() { foreach (IObserver observer in observers) { observer.Update(count); } } }

然后可以定义一个观察者ConsoleObserver,一个被观察者Counter,再计数器增加时,通知ConsoleObserver输出到控制台。

csharp
Counter counter = new Counter(); IObserver consoleObserver = new ConsoleObserver(); counter.AddObserver(consoleObserver); counter.Increment();

控制台得到输出Count = 1

结论

观察者模式广泛应用于GUI(图形用户界面)开发、事件驱动系统、消息通知系统、进程间通信等场景中。

它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,当主题对象发生变化时,所有依赖于它的观察者对象都会得到通知并自动更新。

观察者模式的作用是将系统中的关注点分离,提高系统的可维护性、扩展性和重用性。通过该模式,主题对象和观察者对象之间的耦合度降低,让它们之间的关系更加松散,从而使系统更加灵活、可扩展和易于维护。

本文作者:Peter.Pan

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!