在观察者模式中,观察者通常通过调用每个方法来通知侦听器,例如:
OnSomethingUpdated(Object) {
....
在这种情况下,我们有耦合:观察者应该对每个监听者做一些操作。当我想通过继承修改观察者或监听器或尝试提取抽象超类以简化观察者(或监听器)的逻辑时,它很难传播消息,我收到意大利面条代码。我认为应该存在某种方式将 Observer 的工作业务逻辑与将消息传播到侦听器的逻辑解耦。相反可能更好——听众应该检查一些消息池。是否存在类似的模式?谢谢。
在观察者模式中,观察者通常通过调用每个方法来通知侦听器,例如:
OnSomethingUpdated(Object) {
....
在这种情况下,我们有耦合:观察者应该对每个监听者做一些操作。当我想通过继承修改观察者或监听器或尝试提取抽象超类以简化观察者(或监听器)的逻辑时,它很难传播消息,我收到意大利面条代码。我认为应该存在某种方式将 Observer 的工作业务逻辑与将消息传播到侦听器的逻辑解耦。相反可能更好——听众应该检查一些消息池。是否存在类似的模式?谢谢。
You're probably not going to like this answer very much, but I'll say it anyway: inheritance is not for code reuse. The observer pattern should not lead to tight coupling -- it should lead to decoupling! So if you're ending up with spaghetti code around your observers/listeners when you're extracting abstract base classes or subclassing, it's because you shouldn't be using inheritance.
There, I said it.
您可以在两者之间添加一个业务代表或一个简单的外观。
因此,观察者只会收到通知,然后将实现委托给包含业务逻辑的实际对象。这样您就可以随意更改您的业务逻辑类。