zoukankan      html  css  js  c++  java
  • [设计模式]观察者模式

    观察者模式比较容易理解,也可以称作订阅/发布模式,C#中的委托/事件就是一种实现。观察者模式定义了对象间的一对多依赖,当一个对象状态改变时,其所有依赖者都会收到通知并自动更新。通俗的说,有一个被观察者,和许多的观察者,当被观察者发出通知的时候,观察者都会知道,并且做出自己的动作。

    实现的时候,被观察者中需要有一个观察者列表,用来添加/删除观察者,并且在自己状态改变时调用观察者的方法,实现观察者的更新;观察者需要知道(也可以不知道)被观察者,取决于观察者是否需要使用被观察者中的数据。

    类图:

    C#中的委托/事件是对观察者模式很好的一个实现,这个实现的好处在于对已经封装好的类,是不可能用观察者接口的,并且更新的方法名也是不同的。C#的做法是在被观察者中声明一个委托 delegate void EventHandler() ,声明一个事件 public event EventHandler Update ,委托 void EventHandler() 相当于定义了抽象函数类,返回值和参数列表是确定的,事件 update 相当于一个函数列表,函数的类型就是委托的 EventHandler 。这样在被观察者的通知函数中,直接调用 Update() 。这时被观察者是不知道观察者的,需要在客户端绑定观察者的动作,客户端中的代码大致是

    被观察者.Update += new EventHandler(观察者.函数);
    被观察者.通知函数;

    其中观察者.函数的返回值和参数列表和委托EventHandler是一样的,这样观察者就可以是不同的类了。

    参考:《Head First设计模式》

  • 相关阅读:
    webpack中如何使用vue
    webpack 4.X 与 Vue 2.X结合
    webpack创建页面的过程
    webpack的css样式文件加载依赖
    webpack-dev-server的执行逻辑
    WebPack命令执行的时候,其内部处理逻辑是什么
    idea for Mac for循环快捷键
    java知识点集锦--基础知识部分
    npm --save-dev --save | -D -S区别
    mysql估算存储数据量
  • 原文地址:https://www.cnblogs.com/belloworld/p/5699857.html
Copyright © 2011-2022 走看看