質問
すべて同じイベントを観察するイベントオブザーバーがいるので、そのイベントを観察する抽象的なスーパークラスがあり、サブクラスが特定の機能をオーバーライド /実装します。
これに関する問題は、イベントオブザーバーメソッドをサブクラスに入れない限り(デザインの目的を打ち負かす)、イベントを観察しないことです。
私は間違いなくこの方法でそれを行うことができますが、私はできるだけ少ないコードを書きたいと思っています。
このように機能する必要があります(私は他に何か間違ったことをしていますか)?
このように動作するはずでない場合は、プロデューサーを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
上で述べたように、私はデコレーターを書きました。これは本質的に同じことを行い、少し違った方法で書かれています。
ウォルター
他のヒント
スーパークラスの関連する方法を抽象的であると宣言するか、各サブクラスが実装する抽象的な「詳細」メソッドと呼ばせることを宣言します。
所属していません StackOverflow