Я работаю над некоторой структурой, и у меня есть абстрактный класс, который должен быть реализован.
Теперь у меня есть другие вещи, которые пользователь должен иметь возможность настраивать, но это необязательно.
Итак, вместо абстрактного метода:
public abstract class AbstractModule {
public void doSomething() {
if (logMessage() != null)
System.out.println(logMessage());
doStuff();
}
protected abstract String logMessage(); // I'm optional
protected abstract void doStuff();
}
Я думал просто проверять реализацию интерфейса:
public interface Log {
String logMessage();
}
public abstract class AbstractModule {
public void doSomething() {
if (this instanceof Log) {
if (((Log) this).logMessage() != null)
System.out.println(((Log) this).logMessage());
}
doStuff();
}
protected abstract void doStuff();
}
Итак, если кто-то реализует AbstractModule с интерфейсом Log, он также покажет сообщение. Выгода для исполнителя, которого я вижу: ей не нужно заботиться о внедрении logMessage(), как это было бы в первом примере. Является ли это действительным подходом или он должен выполняться по-другому?
Спасибо заранее!
С наилучшими пожеланиями