题
我有事件观察者,所有观察者都观察到同一事件,因此我有一个抽象的超类,它观察该事件,然后子类覆盖 /实现特定功能。
问题在于,除非我将事件观察者方法放在子类中(这打败了我的设计目的),否则它不会观察事件。
我肯定可以这样做,但是我想编写尽可能少的代码。
它应该以这种方式工作(我在做错事)吗?
如果不应该这样工作,那么我可以为一件事和拦截器编写生产者。我认为我的第一种方法更简单,更可能被其他开发人员正确使用。
示例代码:
超类:
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
我写了一个装饰师,如上所述。这本质上是同样的事情,只是写了略有不同。
沃尔特
其他提示
要么在超级类中声明相关方法是抽象的,要么将每个子类实施的抽象“细节”方法称为抽象的“详细”方法。
不隶属于 StackOverflow