我有事件观察者,所有观察者都观察到同一事件,因此我有一个抽象的超类,它观察该事件,然后子类覆盖 /实现特定功能。

问题在于,除非我将事件观察者方法放在子类中(这打败了我的设计目的),否则它不会观察事件。

我肯定可以这样做,但是我想编写尽可能少的代码。

它应该以这种方式工作(我在做错事)吗?

如果不应该这样工作,那么我可以为一件事和拦截器编写生产者。我认为我的第一种方法更简单,更可能被其他开发人员正确使用。

示例代码:

超类:

public abstract class AbstractFileWriter
{
  public void onReady(@Observes ReadyEvent readyEvent)
  {
    try
    {
      handleReady(readyEvent, ...);
    }
  }

  protected abstract handleReady(ReadyEvent readyEvent, otherParameters go here);
}

子类

public class XmlWriter extends AbstractFileWriter
{
   protected handleReady( ... )
   { ... }
}

如果我以这种方式写作,则永远不会调用Handleready(也不准备就此而言);但是,如果我在子类中使用观察者方法编写它,则可以按预期进行工作。我想这样写,因为我必须编写的代码要少得多,而少一些抽象的代码应该使其更容易理解。

沃尔特

有帮助吗?

解决方案 2

我写了一个装饰师,如上所述。这本质上是同样的事情,只是写了略有不同。

沃尔特

其他提示

要么在超级类中声明相关方法是抽象的,要么将每个子类实施的抽象“细节”方法称为抽象的“详细”方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top