对于何时应该使用委托进行间接关联和使用观察者,有什么指导原则吗?
在C#中,您可以使用委托进行简单的回调。我想指向函数的指针和指向成员函数的指针也可以被认为是委托(对吗?)
我意识到要使用观察者,你需要创建一个接口,并实现它,所以它是更强类型的,关系也更正式。对于委托,只要函数签名和可访问性匹配,就可以将它们“挂钩”。
委托会使观察者模式变得毫无意义吗?你如何决定委托模式还是观察者模式?
发布于 2011-05-19 11:50:03
观察者模式的一个优点是,如果您有大量通常由相关方订阅的事件,则将单个对象传递到方法中以订阅事件要比单独订阅每个事件容易得多。由于C#缺少为匿名类as can be done with Java指定接口和方法,因此实现观察者模式变得有点费力,因此大多数人选择使用事件。
传统观察者模式的另一个好处是,在您出于某种原因需要询问订阅者的情况下,它可以更好地处理。我遇到过这样的需求,当对象通过web服务边界时,委托存在问题,而观察者模式只是对另一个对象的引用,所以只要序列化像NetDataContractSerializer一样保持对象图中引用的完整性,它就可以很好地工作。在这些情况下,可以根据引用的订阅者是否也在同一对象图中来区分应该在建立服务边界之前删除的订阅者。
发布于 2011-04-07 23:42:39
委托可以用来实现观察者模式--想想事件。
要在没有事件的情况下完成此操作,请查看此处:http://www.dofactory.com/Patterns/PatternObserver.aspx
如果您愿意的话,将其重构为使用委托并不需要太多。
我能想到的实现接口的唯一优点是所有实现之间的成员名称一致性。
https://stackoverflow.com/questions/5583623
复制相似问题