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

このように記述した場合、handleReady は呼び出されません (また、onReady も呼び出されません)。しかし、サブクラス内でオブザーバー メソッドを使用して記述すると、期待どおりに動作します。書かなければならないコードがはるかに少なく、抽象化が少し少ないため、理解しやすくなるので、この方法で書きたいと思います。

ウォルター

4

2 に答える 2

0

上記のようにデコレータを作成しました。これは本質的に同じことを行いますが、わずかに異なる方法で記述されています。

ウォルター

于 2010-08-30T14:54:00.257 に答える
0

スーパークラスで関連するメソッドを抽象として宣言するか、各サブクラスが実装する抽象「詳細」メソッドを呼び出すようにします。

于 2010-08-29T19:09:02.750 に答える