1

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

这样做的问题是它不会观察事件,除非我将事件观察者方法放在子类中(这违背了我的设计目的)。

我当然可以这样做,但我想编写尽可能少的代码。

它应该以这种方式工作(我做错了什么吗)?

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

示例代码:

超类:

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 永远不会被调用(而且 onReady 也不会被调用);但是,如果我使用子类中的观察者方法编写它,它会按预期工作。我想以这种方式编写它,因为我必须编写的代码要少得多,而且抽象程度要少一点,这应该使它更容易理解。

沃尔特

4

2 回答 2

0

要么将超类中的相关方法声明为抽象,要么让它调用每个子类实现的抽象“详细”方法。

于 2010-08-29T19:09:02.750 回答
0

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

沃尔特

于 2010-08-30T14:54:00.257 回答