2014-03-26 47 views
0

我是新来的设计模式。我写了一段代码,其中有一个主题和多个观察者。主题和观察者都有界面。所以说如果我有5个观察者,我是否需要用他们各自的更新方法创建5个不同的接口?还是应该为所有观察者创建一个界面并编写五种更新方法?设计模式 - 多观察者

回答

4

通常你只需要一个观察者接口,所有5个观察者类都可以实现。观察员如何对变更通知做出反应将会有所不同。这是否适用于您将完全取决于您的计划结构和需求。

请注意,共享一个接口的观察者也可以监听观察到的不同更改,但仍使用相同的接口。例如,如果您使用PropertyChangeListener作为观察者接口,则可以通过检查传递给您的观察者的PropertyChangeEvent中返回的propertyName来基于所听内容。

但是请注意,如果观察者正在倾听的内容非常不同,那么是的,他们可能需要一个独特的界面。使用Swing示例,因为这是我最熟悉的,所以有许多不同的侦听器类和接口可用,包括ActionListener,MouseListener,MouseMotionListener ......都来自通用超级接口EventListener。请注意,所有将参数传递给基于普通超类AWTEvent类的侦听器。

想要获得更具体的帮助,请考虑向我们提供更具体的问题。

+1

是的,但只有当事件是相同的。如果你观察五个完全不相关的东西,我会有五个接口。 –

+0

@DavidEhrmann:有时是真的,但不一定。请参阅编辑。 –

0

如果您使用的是Java EE,我会建议使用使用JMS的主题和订阅者...它更健壮。我不知道你在寻找什么样的解决方案,但是如果你需要坚持并防止丢失数据,它会更加强大......

不要犹豫,如果你需要的东西。

1

我需要创建5个不同的接口与他们的单独更新方法吗?或者我应该创建一个界面并为所有观察者编写五个更新方法?

具有五种更新方法的一个接口似乎比五个不同接口的内聚力要小得多。但是,您说您只有一种主题(这是观察员的客户端)。但这取决于这个客户端的凝聚力。

interface segregation principle可能适用于此,以帮助您决定。如果您提供更多细节,我可以提供更多意见。