У меня есть два класса, A и B. У них много общей логики, но в некоторых местах эта логика отличается, например:
CommonLogicClass {
CommonMethod() {
common1
different1
common2
different2
}
}
Я не считаю лучший метод дляэто существует, но просто хочу знать, какие методы возможны.
Я нашел только два схожих способа: передать части, отличающиеся в конструктор CommonLogicClass, или заставить A и B реализовать интерфейс и реализовать методы Different1 () и Different2 (), и после этого использовать интерфейс вместо частейкоторые отличаются.
Есть некоторые проблемы с этими методами.Когда я создаю 3-й класс C тем же методом, мне может понадобиться дополнительная деталь, как в примере ниже:
CommonMethod() {
common1
different1
common2
different2
additionalCodeOnlyForCClass
}
В этом случае мне придется добавить пустые действия или добавить метод для интерфейсаи реализовать его как пустой метод во всех классах, кроме C.
Или у меня может быть худший случай, когда common2 является общим для A и B, но не для C:
CommonMethod() {
common1
different1 \
different2 - (or just different1)
different3 /
}
Iпотребуется исключить common2 из общего, сделать его другим и добавить один и тот же код для всех классов, кроме C.
Так что всегда есть много изменений, когда минимум логики изменен или добавлен.Каковы другие более гибкие способы извлечения общей логики?Может быть, есть какие-то шаблоны, которые я должен выучить, или несколько книг, которые я должен прочитать, чтобы ответить на такие вопросы об архитектуре?