CDI - наблюдатели событий
Вопрос
У меня есть наблюдатели событий, которые все соблюдают одно и то же событие, поэтому у меня абстрактный суперкласс, который соблюдает это событие, а затем подкласс переопределяет / реализует конкретную функциональность.
Проблема с этим является то, что она не соблюдает событие, если я не помещаю метод наблюдателя события в подклассе (который поражает целью моего дизайна).
Наверняка могу сделать это таким образом, но я хочу написать как можно меньше.
Если это будет работать так (я делаю что-то еще не так)?
Если это не должно работать таким образом, то я могу написать производителю на одну вещь, а затем перехватить. Я думал, что мой первый подход был проще и, скорее всего, будет правильно использоваться другими разработчиками.
Пример кода:
Суперкласс:
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( ... )
{ ... }
}
Если я так пишу таким образом, Handveready никогда не вызывает (и ни один не горит для этого); Однако, если я напишу это с помощью метода наблюдателя в подклассе, он работает как ожидалось. Я хочу написать это так, как есть гораздо меньше кода, мне придется писать и немного меньше абстракции, которая должна облегчить понять.
Уолтер
Решение 2
Я написал декоратор, как я упоминал выше. Это, по сути, делает то же самое, просто написано немного по-другому.
Уолтер
Другие советы
Либо объявляйте соответствующий метод в SuperClass, чтобы быть абстрактным или оно вызовут абстрактный метод «Деталь», что каждый подкласс навещает.