Суперкласс против служебного класса для общего кода
У меня есть тот же метод в 2 классах, которые копируют поля из одного объекта для строителей. Я хочу реорганизовать его, но я не знаю, должен ли я создать статический метод в служебном классе или абстрагировать его в суперкласс.
Классы, которые разделяют этот код, являются Beans и являются частью многопоточного приложения.
Метод будет выглядеть так:
protected static void copyPartyGroup(Message.Builder msgBuilder,
final PartyGroup partyIDsGroup, Party.Builder rartyBuilder) {
rartyBuilder.setPartyID(partyIDsGroup.getId())
....
msgBuilder.setID(partyIDsGroup.getId())
....
}
Большое спасибо за Вашу помощь.
2 ответа
Вы также можете использовать черту в Java 8, это интерфейс с методами по умолчанию
см.: https://opencredo.com/traits-java-8-default-methods/
или: https://dzone.com/articles/using-traits-in-java-8
Если два ваших класса не используют одну и ту же родительскую структуру, не используйте супер абстрактный класс, если единственная причина для создания этого суперкласса - поделиться вашим методом copyPartyGroup
это не хорошая практика.
см.: Лисковский принцип замещения
Если вы хотите соблюдать принцип единой ответственности:
Я думаю, что вы должны создать класс обслуживания. В вашем случае, возможно, потокобезопасный синглтон с синхронизированными методами для rartyBuilder.setPartyID
а также msgBuilder.setID
, (см. идиому держателя инициализации по требованию)
Если вы можете извлечь статический метод, то лучше просто сделать это.
Использование наследования для совместного использования кода объединяет ваш код и делает его действительно трудно распутать позже.