私がしている:不器嫌な継承の代わりにフィルタ/構成パターン?
class ServiceObject {
ServiceClass svcClass;
void execute(String operation, Map arguments, ...) {
svcClass.execute(this, operation, arguments, ...);
}
}
その後、私は同期して追加することのサブクラスを持っている:
class SynchronizedServiceObject extends ServiceObject {
void execute(String operation, Map arguments, ...) {
synchronized(lock) {
super.execute(operation, arguments, ...);
}
}
}
私はまた、しかし
class LogContextServiceObject extends ServiceObject {
void execute(String operation, Map arguments, ...) {
MDC.set("context", myCtx);
super.execute(operation, arguments, ...);
MDC.remove("context");
}
}
ログコンテキストを追加するためのサブクラスを持っています両方の機能を使用したい場合は、両方の機能を持つ別のサブクラスを作成する必要があります。より多くの機能(ロギング、リクエストの書き換えなど)を追加すれば、必要なすべての組み合わせに対して多くのクラスを書く必要があると想像することができます。
代わりに、ServiceObject
の作成時に、サブクラスを削除して、フィルタまたはコンポーネントオブジェクトのいくつかの並べ替えを渡したいと思います。これに対して推奨されるパターンは何ですか(Java、または一般的に)。