玲液 发表于 2025-6-6 20:40:37

重温设计模式 --- 观察者模式

引言

观察者模式是一种行为型设计模式,它允许对象之间建立一种一对多的关系,使得当一个对象状态改变时,所有依赖它的对象都能够自动得到通知并更新自己的状态。该模式可以帮助我们实现松耦合的系统,以便更好地应对变化和扩展。
在观察者模式中,有两个角色:观察者和被观察者。被观察者负责维护观察者列表,并在状态发生改变时通知观察者;观察者则负责接收被观察者的通知并进行相应的处理。
下面我们通过一个简单的例子来说明观察者模式的用法。假设我们要实现一个计数器,每次计数器增加时需要通知所有的观察者。
观察者

先定义一个接口IObserver,用于定义观察者的行为,该接口只有一个方法Update,用于接收被观察者的通知并更新观察者的状态。
public interface IObserver
{
    void Update(int count);
}再定义一个观察者实现ConsoleObserver,它负责在控制台上输出计数器的值。
public class ConsoleObserver : IObserver
{
    public void Update(int count)
    {
      Console.WriteLine($"Count = {count}");
    }
}被观察者

定义一个被观察者Counter,它负责维护观察者列表,并在计数器增加时通知观察者。
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输出到控制台。
Counter counter = new Counter();

IObserver consoleObserver = new ConsoleObserver();

counter.AddObserver(consoleObserver);

counter.Increment();控制台得到输出Count = 1。
结论

观察者模式广泛应用于GUI(图形用户界面)开发、事件驱动系统、消息通知系统、进程间通信等场景中。
它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,当主题对象发生变化时,所有依赖于它的观察者对象都会得到通知并自动更新。
观察者模式的作用是将系统中的关注点分离,提高系统的可维护性、扩展性和重用性。通过该模式,主题对象和观察者对象之间的耦合度降低,让它们之间的关系更加松散,从而使系统更加灵活、可扩展和易于维护。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

任佳湍 发表于 2025-10-29 00:48:22

过来提前占个楼

明思义 发表于 2025-12-15 17:32:18

这个好,看起来很实用

晁红叶 发表于 2025-12-22 12:23:39

过来提前占个楼

莅耸 发表于 2025-12-22 12:52:45

新版吗?好像是停更了吧。

钨哄魁 发表于 2026-1-16 10:14:11

鼓励转贴优秀软件安全工具和文档!

糙昧邵 发表于 2026-1-18 21:26:08

这个好,看起来很实用

揭荸 发表于 2026-1-19 11:02:43

感谢发布原创作品,程序园因你更精彩

供挂 发表于 2026-1-22 08:31:51

感谢,下载保存了

殳世英 发表于 2026-1-23 04:48:40

新版吗?好像是停更了吧。

龙正平 发表于 2026-1-25 11:00:01

喜欢鼓捣这些软件,现在用得少,谢谢分享!

些耨努 发表于 2026-1-26 09:55:21

过来提前占个楼

蝙俚 发表于 2026-1-28 14:01:31

感谢,下载保存了

仟仞 发表于 2026-2-6 11:30:30

用心讨论,共获提升!

港髁 发表于 2026-2-7 09:14:34

谢谢楼主提供!

恶凝毛 发表于 2026-2-8 02:13:12

yyds。多谢分享

穆望 发表于 2026-2-9 10:09:58

很好很强大我过来先占个楼 待编辑

系味 发表于 2026-2-10 02:55:50

感谢发布原创作品,程序园因你更精彩

司空娅玲 发表于 2026-2-10 20:33:19

东西不错很实用谢谢分享

阜逐忍 发表于 2026-2-10 22:48:31

感谢发布原创作品,程序园因你更精彩
页: [1] 2
查看完整版本: 重温设计模式 --- 观察者模式