Ваш подход хорош, но ему нужно простое улучшение, чтобы сделать его идеальным - используйте метод startRMI()
final
:
public final void startRMI(int port) {
fillRegistry();
}
Таким образом, вы предотвратите его переопределение (возможно, потому чтоне зная, что все в startRMI()
должно быть повторно использовано, и что только fillRegistry()
должно быть настроено).
Ваше решение обычно соответствует шаблону проектирования шаблона :
Метод шаблона является методом в суперклассе, обычно абстрактном суперклассе, и определяет каркас операции с точки зрения количества шагов высокого уровня.Эти шаги сами реализуются дополнительными вспомогательными методами в том же классе, что и метод шаблона.
Вспомогательные методы могут быть либо абстрактными методами, для которых подклассы требуются для предоставления конкретных реализаций, либо методами перехвата, которые имеют пустые тела в суперклассе. Подклассы могут (но не обязаны) настраивать операцию путем переопределения метода ловушки s.Целью метода шаблона является определение общей структуры операции , в то же время позволяя подклассам уточнить или переопределить определенные этапы .(Википедия)
Учитывая вышеизложенное, метод startRMI()
представляет собой шаблонный метод, который определяет каркас операции с помощью ряда высокоуровневых шагов (в вашем случае это только один шаг, ноэто не имеет значения).Метод fillRegistry()
в вашем примере является шагом высокого уровня - он определен как абстрактный метод в суперклассе и имеет конкретную реализацию в суперклассах.
С другой стороны, если вы переопределите методstartRMI()
в подклассе, это больше не будет нормально.Вот почему вы должны сделать это final
, чтобы избежать путаницы - таким образом, кто-то, кто создает подкласс, будет знать, что он должен реализовать fillRegistry()
(так как он абстрактный), но не должен изменять реализацию startRMI
(так как он финальный).
Поскольку это широко используемый шаблон проектирования, я бы не стал беспокоиться, если это решение будет в порядке, многие люди делают это так, и каждый, кто знает шаблоны проектирования, узнает его, я думаю, чточувствует себя очень естественно даже для разработчиков, которые не знают шаблон дизайна.