Вопрос

У меня есть наблюдатели событий, которые все соблюдают одно и то же событие, поэтому у меня абстрактный суперкласс, который соблюдает это событие, а затем подкласс переопределяет / реализует конкретную функциональность.

Проблема с этим является то, что она не соблюдает событие, если я не помещаю метод наблюдателя события в подклассе (который поражает целью моего дизайна).

Наверняка могу сделать это таким образом, но я хочу написать как можно меньше.

Если это будет работать так (я делаю что-то еще не так)?

Если это не должно работать таким образом, то я могу написать производителю на одну вещь, а затем перехватить. Я думал, что мой первый подход был проще и, скорее всего, будет правильно использоваться другими разработчиками.

Пример кода:

Суперкласс:

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, чтобы быть абстрактным или оно вызовут абстрактный метод «Деталь», что каждый подкласс навещает.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top