ToB企服应用市场:ToB评测及商务社交产业平台

标题: 委托及观察者模式 [打印本页]

作者: 嚴華    时间: 2023-6-25 16:54
标题: 委托及观察者模式
委托

委托(delegate)是一种特殊的类型(class),它可以被认为是一个可以拥有函数引用的类,它的声明规定了它能够持有的函数引用的函数形式,同时它可以存储多个函数引用,并通过自己的方法调用所有注册在它身上的方法(发布者)。
理解了观察者模式就理解了委托
它的特点在于:


  1. namespace InterfaceTest
  2. {
  3.     [TestClass]
  4.     public class DelegateTest
  5.     {
  6.         // 一个自定义的委托类型的变量,类比自定义的类的变量
  7.         public event Function calc;
  8.         [TestMethod]
  9.         public void TestMethod1()
  10.         {
  11.             calc += () =>
  12.             {
  13.                 return 0.0;
  14.             };
  15.             calc += DelegateTest.C;
  16.             calc += new Function(C);
  17.             calc = calc + C;
  18.             calc.Invoke();
  19.         }
  20.         public static double C() { return 1.0;  }
  21.     }
  22.     // 委托是一个类型,所以它可以直接定义在名称空间下
  23.     // 无法为委托类型自定义方法
  24.     public delegate double Function();
  25.     public class Caller
  26.     {
  27.         public Caller()
  28.         {
  29.             var dt = new DelegateTest();
  30.             // 由于calc是一个event修饰的属性,所以从外部调用Invoke将引发异常
  31.             dt.calc.Invoke(); // ERROR
  32.         }
  33.     }
  34. }
复制代码

委托及观察者模式


在观察者模式中主要有四个事物:发布者、订阅者、“订阅”过程、“发布”过程。
发布者主要包含一个保存了订阅者引用的集合,在“发布过程”发生时,通过这个订阅者所持有的引用调用实现了相同接口的订阅者的方法(在这一步有多种方式,不一定非要是接口,目的在于使发布者能够通过多态统一保存所有的订阅者,从而在“发布”时遍历整个集合调用所有订阅者的方法。关于其它的实现方式可见引用.6)。
在委托中,观察者模式的这四个部分的实现如下:
引用


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4