Если вам нужно какое-то поведение по умолчанию, но по какой-то причине оно не должно использоваться специализациями, как, например, реализация логики в неабстрактном классе Adapter просто для простоты создания прототипов, но которую не следует использовать, например, в производстве, Вы можете инкапсулировать эту логику и записать предупреждение о том, что она используется, без необходимости ее запуска.
Конструктор базового класса может проверить, указывает ли переменная, содержащая логику, значение по умолчанию. (писать в очень абстрактных терминах, так как я думаю, что это должно работать на любом языке)
Это будет что-то вроде этого (не скомпилированный, непроверенный и неполный) пример Java (до 7):
public interface SomeLogic {
void execute();
}
public class BaseClass {
//...private stuff and the logging framework of your preference...
private static final SomeLogic MUST_OVERRIDE = new SomeLogic() {
public void execute() {
//do some default naive stuff
}
};
protected SomeLogic getLogic() { return MUST_OVERRIDE; }
//the method that probably would be marked as MustOverride if the option existed in the language, maybe with another name as this exists in VB but with the same objective as the abstract keyword in Java
public void executeLogic() {
getLogic().execute();
}
public BaseClass() {
if (getLogic() == MUST_OVERRIDE) {
log.warn("Using default logic for the important SomeLogic.execute method, but it is not intended for production. Please override the getLogic to return a proper implementation ASAP");
}
}
}
public GoodSpecialization extends BaseClass {
public SomeLogic getLogic() {
//returns a proper implementation to do whatever was specified for the execute method
}
//do some other specialized stuff...
}
public BadSpecialization extends BaseClass {
//do lots of specialized stuff but doesn't override getLogic...
}
Некоторые вещи могут отличаться в зависимости от требований и явно проще, особенно для языков с лямбда-выражениями, но основная идея будет такой же.
Без встроенной вещи всегда есть какой-то способ ее эмулировать, в этом примере вы получите предупреждение во время выполнения в файле журнала с домашним шаблоном, похожим на решение, что только ваши потребности должны указывать, если этого достаточно или более жесткие манипуляции с байт-кодом, разработка идеальных плагинов или все, что нужно от волшебства.