質問

すべて同じイベントを観察するイベントオブザーバーがいるので、そのイベントを観察する抽象的なスーパークラスがあり、サブクラスが特定の機能をオーバーライド /実装します。

これに関する問題は、イベントオブザーバーメソッドをサブクラスに入れない限り(デザインの目的を打ち負かす)、イベントを観察しないことです。

私は間違いなくこの方法でそれを行うことができますが、私はできるだけ少ないコードを書きたいと思っています。

このように機能する必要があります(私は他に何か間違ったことをしていますか)?

このように動作するはずでない場合は、プロデューサーを1つのこととインターセプターのために書くことができます。私の最初のアプローチはよりシンプルで、他の開発者が適切に使用する可能性が高いと思いました。

例コード:

スーパークラス:

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

このように書くと、Handledreadyが呼び出されることはありません(どちらもその点ではありません)。ただし、サブクラス内のオブザーバーメソッドでそれを書くと、予想どおりに機能します。私が書く必要があるコードがはるかに少なく、少し理解しやすくなるはずの抽象化が少ないので、このように書きたいと思います。

ウォルター

役に立ちましたか?

解決 2

上で述べたように、私はデコレーターを書きました。これは本質的に同じことを行い、少し違った方法で書かれています。

ウォルター

他のヒント

スーパークラスの関連する方法を抽象的であると宣言するか、各サブクラスが実装する抽象的な「詳細」メソッドと呼ばせることを宣言します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top