1

在观察者模式中,观察者通常通过调用每个方法来通知侦听器,例如:

OnSomethingUpdated(Object) {
....

在这种情况下,我们有耦合:观察者应该对每个监听者做一些操作。当我想通过继承修改观察者或监听器或尝试提取抽象超类以简化观察者(或监听器)的逻辑时,它很难传播消息,我收到意大利面条代码。我认为应该存在某种方式将 Observer 的工作业务逻辑与将消息传播到侦听器的逻辑解耦。相反可能更好——听众应该检查一些消息池。是否存在类似的模式?谢谢。

4

4 回答 4

3

监听器实际上应该是一个接口:

interface MyListener {
  void onSomethingUpdated(Object eventData);
}

通过这种方式,主体与观察者的具体实例分离;它应该保留这些接口引用的列表。

此处查看如何在 Java 中实现此模式。

现在,为了进一步将主题与消息传播分离,我建议您看一下中介者模式。

于 2012-06-23T10:07:50.953 回答
1

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.

于 2012-06-23T03:55:09.713 回答
1

观察者模式中,an向主题Observer 注册Observable。的onSomethingUpdated()方法由Observer调用Observable,它通知所有松散耦合的侦听器。这里有一个相关的例子。

观察者模式

于 2012-06-23T03:43:19.720 回答
0

您可以在两者之间添加一个业务代表或一个简单的外观。

因此,观察者只会收到通知,然后将实现委托给包含业务逻辑的实际对象。这样您就可以随意更改您的业务逻辑类。

于 2012-06-23T03:34:54.357 回答