Frage

Ich habe Ereignis Beobachter, die alle das gleiche Ereignis beobachten, so habe ich eine abstrakte Superklasse, die dieses Ereignis beobachtet und dann die Unterklasse überschreibt / Geräte die spezifische Funktionalität.

Das Problem dabei ist, dass es nicht das Ereignis nicht beobachten, wenn ich die Ereignis Beobachter Methode in der Unterklasse setzen (was den Zweck meines Designs besiegt).

Ich kann mit Sicherheit es auf diese Weise tun, aber ich mag so wenig Code wie möglich schreiben.

Sollte es funktioniert auf diese Weise (bin ich etwas anderes falsch zu machen)?

Wenn es nicht soll, so arbeiten, dann kann ich einen Produzenten für eine Sache schreiben und dann Abfangjäger. Ich dachte, dass mein erster Ansatz einfacher war und eher richtig von anderen Entwicklern verwendet werden.

Beispielcode:

Oberklasse:

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

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

SubClass

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

Wenn ich es auf diese Weise zu schreiben, wird handleReady nie aufgerufen (und weder ist onReady was das betrifft); aber wenn ich es mit der Beobachter-Methode in der Unterklasse schreiben, es funktioniert wie erwartet. Ich mag es so schreiben, wie es viel weniger Code ist würde ich schreiben und ein bisschen weniger Abstraktion, die es leichter verständlich machen sollten.

Walter

War es hilfreich?

Lösung 2

Ich schrieb einen Dekorateur, wie ich oben erwähnt. Dies resultiert im Wesentlichen macht das Gleiche, nur etwas anders geschrieben.

Walter

Andere Tipps

Entweder erklären die entsprechende Methode in der übergeordneten Klasse abstrakt zu sein oder es ein abstraktes „Detail“ Methode aufrufen müssen, dass jede Unterklasse implementiert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top