Суперкласс против служебного класса для общего кода

У меня есть тот же метод в 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, (см. идиому держателя инициализации по требованию)

Если вы можете извлечь статический метод, то лучше просто сделать это.

Использование наследования для совместного использования кода объединяет ваш код и делает его действительно трудно распутать позже.

Другие вопросы по тегам