通常情况下,我会遇到一个给定对象需要有很多侦听器的情况。例如,我可能有
class Elephant {
public void addListener( ElephantListener listener ) { ... }
}
但我会有很多这样的情况。也就是说,我还将有一个 Tiger
对象,该对象将具有 TigerListener
s。现在, TigerListener
s 和 ElephantListener
s 是完全不同的:
interface TigerListener {
void listenForGrowl( Growl qrowl );
void listenForMeow( Meow meow );
}
尽管
interface ElephantListener {
void listenForStomp( String location, double intensity );
}
我发现我总是要不断地在每个动物类中重新实现广播机制,而且实现总是一样的。有首选模式吗?
原文由 Jake 发布,翻译遵循 CC BY-SA 4.0 许可协议
而不是每个
Listener
对您可以发送的每种事件类型都有特定的方法,更改接口以接受通用Event
类。然后,如果需要,您可以将Event
子类化为特定的子类型,或者让它包含诸如double intensity
之类的状态。TigerListener 和 ElephentListener 然后变成
事实上,您可以进一步将此接口重构为普通的
Listener
:您的
Listener
实现可以包含他们关心的特定事件所需的逻辑订阅者和发布者之间的关键关系是发布者可以向订阅者发送事件,不一定可以向订阅者发送某些类型的事件——这种类型的重构将逻辑从接口向下推到具体的实现中.