Question

Je observateurs d'événements qui célèbrent tous le même événement, donc j'ai un résumé superclasse qui observe cet événement et la sous-classe overrides / implémente la fonctionnalité spécifique.

Le problème est qu'il ne respecte pas l'événement à moins que je mets la méthode d'observation de l'événement dans la sous-classe (qui contrecarre le but de ma conception).

Je peux certainement le faire de cette façon, mais je veux écrire un code aussi peu que possible.

Faut-il travailler de cette façon (je fais mal quelque chose d'autre)?

S'il est pas censé fonctionner de cette façon, je peux écrire un producteur pour une chose et un intercepteur. Je pensais que ma première approche était plus simple et plus susceptible d'être utilisé correctement par d'autres développeurs.

exemple de code:

SuperClass:

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( ... )
   { ... }
}

Si je l'écris cette façon, handleReady n'est jamais invoquée (et ni est onReady pour cette matière); Cependant, si je l'écris avec la méthode d'observateur au sein de la sous-classe, il fonctionne comme prévu. Je veux l'écrire de cette façon car il y a beaucoup moins de code que je dois écrire et un peu moins abstraction qui devrait le rendre plus facile à comprendre.

Walter

Était-ce utile?

La solution 2

J'ai écrit un décorateur comme je l'ai mentionné ci-dessus. Cela fait essentiellement la même chose, juste écrit un peu différemment.

Walter

Autres conseils

Soit déclarer la méthode pertinente dans la superclasse être abstraite ou avoir appeler une méthode abstraite « détail » que chaque sous-classe met en œuvre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top