在设计模式中,有一种我们常常会用到的设计模式——观察者模式。那么这种设计模式和我们的主题“如何在PEVR中使用委托”有什么关系呢?别急,先让我们来聊一聊什么是观察者模式。
首先让我们来看看报纸和杂志的订阅是怎么一回事:
1)报社的任务便是出版报纸。
2)向某家报社订阅他们的报纸,只要他们有新的报纸出版便会向你发放。也就是说,只要你是他们的订阅客户,便可以一直收到新的报纸。
3)如果不再需要这份报纸,则可以取消订阅。取消之后,报社便不会再送新的报纸过来。
4)报社和订阅者是两个不同的主体,只要报社还一直存在,不同的订阅者便可以来订阅或取消订阅。
如果各位读者能看明白我上面所说的报纸和杂志是如何订阅的,那么也就了解了观察者模式到底是怎么一回事。除了名称不大一样,在观察者模式中,报社或者说出版者被称为“主题”(Subject),而订阅者则被称为“观察者”(Observer)。将上面的报社和订阅者的关系移植到观察者模式中,就变成了如下这样:主题(Subject)对象管理某些数据,当主题内的数据改变时,便会通知已经订阅(注册)的观察者,而已经注册主题的观察者此时便会收到主题数据改变的通知并更新,而没有注册的对象则不会被通知。
当我们试图去勾勒观察者模式时,可以使用报纸订阅服务,或者出版者和订阅者来比拟。而在实际的开发中,观察者模式被定义成了如下这样:
观察者模式:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
介绍了这么多观察者模式,是不是也该说一说委托了呢?是的,C#语言通过委托来实现回调函数的机制,而回调函数是一种很有用的编程机制,可以被广泛用在观察者模式中。