zoukankan      html  css  js  c++  java
  • 这是传说,必须迷恋它:观察者模式

    观察者模式又叫发布-订阅模式。它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生改变时,会通知所有观察者对象,使它们能够自动更新自己。
    从上面的描述中,我们可以抽象出主题Subject类和观察者Observer类,”一对多“的关系告诉我们,观察者可以有多个,而主题只有一个。主题有一个很有趣的东西叫”状态“,因为它的变化会唤醒多个观察者”自动更新自己“。
    举例来说,我们上网常用的某种下载工具,当文件下载结束时,下载结束的提示音(Toner)响起,下载日志(Logger)里写入文件下载成功时的时间。这里我们可以抽象出被下载的文件为主题Subject,它的标志是否下载成功IsDownloaded是”状态“。提示音Toner和下载日志Logger为观察者。我们用c#里的委托和事件来实现。好了,code is cheap.上代码了。
    1.类图:

    2.代码

    Code

    正像上面代码里注释的那样,实际的项目中,观察者更新自己的方法名并不一定叫Update,我们改进一下代码中的方法名,让它们看上去更实际一些:

    Code


     


    作者:Jeff Wong
    出处:http://jeffwongishandsome.cnblogs.com/
    本文版权归作者和博客园共有,欢迎围观转载。转载时请您务必在文章明显位置给出原文链接,谢谢您的合作。

  • 相关阅读:
    【BZOJ4892】【TJOI2017】—DNA(后缀数组+ST表)
    【BZOJ1563】【NOI2009】—诗人小G(决策二分栈优化dp)
    【洛谷P5249】【LnOI2019】—加特林轮盘赌(概率dp)
    【Ural1519】— Formula1(轮廓线dp)
    【BZOJ3728】【PA2014】—Final Zarowki(思维题)
    【BZOJ3730】—震波(动态点分治)
    【Hackerrank (70)】—Range Modular Query(莫队+暴力)
    【省选模拟】—Cactus(圆方树+dfs序)
    【BZOJ2125】—最短路(圆方树+树链剖分)
    python 基础 列表
  • 原文地址:https://www.cnblogs.com/jeffwongishandsome/p/1423974.html
Copyright © 2011-2022 走看看