无废话C#设计模式之十九:Observer
2009-04-02 08:23:02 来源:WEB开发网核心提示: l 注意,本例仅仅用来演示观察者模式的结构,无废话C#设计模式之十九:Observer(5),并没有遵循.NET事件模型的最佳实践,何时采用通过这个例子,注意事项l 由于这种灵活性,在观察者订阅事件的时候需要考虑是否会出现破坏行为?是否会出现无限循环或死锁等问题?观察者响应的时候是否会影响
l 注意,本例仅仅用来演示观察者模式的结构,并没有遵循.NET事件模型的最佳实践。
何时采用
通过这个例子,我们就很容易理解观察者模式的适用点了:
l 一个对象的行为引发其它多个对象的行为。前者成为主体,后者称为观察者。
l 为了降低耦合,不希望主体直接调用观察者的方法,而是采用动态订阅主体事件的方式来进行自动的连锁响应行为。
l 为了增加灵活性,希望动态调整订阅主体事件的观察者,或者希望动态调整观察者订阅主体的事件。
实现要点
l 抽象主体角色公开了自身的事件,可以给任意观察者订阅。
l 抽象观察者角色定义了统一的处理行为,在C#中使用事件-代理模式的话,统一的处理行为并不这么重要,有的时候甚至还会限制灵活性。由于本例的特殊原因,并没有从这个接口中得益。
l 响应方法订阅代理事件的操作可以在观察者中定义也可以在外部定义,根据自己的需求决定,放在外部定义灵活性更高。
l 具体观察者往往只需要实现响应方法即可。
l 可以有多个主体角色、多个观察者角色交错,也可以一个类型是两个角色,主体也可以提供多个事件。从应用上来说观察者模式变化是非常多的。
注意事项
l 由于这种灵活性,在观察者订阅事件的时候需要考虑是否会出现破坏行为?是否会出现无限循环或死锁等问题?观察者响应的时候是否会影响其它观察者?
l 对于观察者数量很多的时候使用观察者模式并不适合,可能会造成性能问题。
更多精彩
赞助商链接