У меня есть:
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 или вообще).