考虑事件、发布者/订阅者等的另一种方式是考虑云及其运行方式。在基于云的系统中,任何实体都可以注册以侦听任何类型的事件,或者可以发布它想要的任何事件。任何倾听的人都会得到该数据。
在您的示例中:出租车中心可以发布/推送事件,例如换班、交通事故作为(位置)、出租车请求在(位置)或整个出租车组将监听的其他类似事件。各个出租车将发布诸如 Pickup At (Location)、Drop off at (Location)、Accident at (Location) 等信息;该中央将出于自己的目的进行记录。如果其他出租车也想监听这些相同的事件,那么他们可以知道其他出租车与他们自己的位置之间的距离和距离,或者是否有其他出租车报告的事故或类似情况。
然而,云事件是事件系统的特定实现。专门订阅事件更为常见。cab 对象在创建时会立即订阅 Central 事件,而中央系统在调度 cab 时会确保它自己订阅了该 cab 的事件。
这样,两个对象都充当发布者和订阅者的角色。它仅针对单个事件。在我的示例PickupAt(Location)
中,将由出租车发布,并由 Central 订阅。因此,对于该事件,Cab 是发布者,Central 是订阅者。一般来说,谁担任什么角色完全取决于系统设计和正在创建的事件。它不是真正可以概括的东西,因为如果您以不同的方式设置事件,整个设置可能会被更改,甚至颠倒。我认为这是最重要的部分。
全体代表
用最简单的术语来说,委托就是参考。它可以引用一个类,更常见的是它可以引用一个类中的一个方法,或者调用一个类中的一个方法。它甚至可以在其内部包含整个方法调用。它确实是一个非常通用的对象,因为它可以做很多事情。在事件的上下文中,委托实际上引用了对实现事件的函数的调用。
简单事件代码
public class c1
{
public event Eventhandler DoStuff;
public c1()
{
}
public void OnDoStuff()
{//this actually makes the event happen
if (DoStuff != null)
DoStuff(this, null);
}
}
public static void Main()
{
c1 x = new c1();
x.DoStuff += new EventHandler(ThingFunction);
x.OnDoStuff();//this is how you would fire the event deliberately
}
public void ThingFunction(object sender, EventArgs x)
{
Console.WriteLine("Something Happened");
}
c1 包含事件DoStuff
,Main 订阅此事件。当代码x.OnDoStuff()
从 ANYWHERE 调用时,如果您将 x 或对它的引用传递到其他处理实际代码的类中,这将非常方便,然后处理程序返回 main,无论x.OnDoStuff()
调用源自多少层, 将执行。
更具体地说,一旦创建了 X,它就可以传递到其他地方。只要将某个函数分配给x.DoStuff
,无论何时何地调用该方法x.OnDoStuff()
,分配给的函数x.DoStuff
都会执行。这就是事件订阅的工作方式。 x.OnDoStuff()
是发布事件的代码调用x.DoStuff
,而任何类......实际上任何数量的类,你可以有多个订阅者毕竟,将能够捕捉到发布的事件。