Мы сделаем interface segregation, разобьём один большой, на набор маленьких.
Дальше - выделим набор основных usage в комбинации.
На каждый из мелких интерфейсов, мы напишем по классу.
Дальше - мы объединяем классы множественным наследованием в нужное нам поведение.
Это по сути наследование вместо композиции.
Впринципе, можно ещё и декорированием такой подход назвать. Мы какому-то одному поведению довешиваем ещё какого-то поведения
Выглядит так, что нужно простое делегирование и реализация интерфейсов)
Представь как это тестировать, поддерживать, расширять, изменять.
Например, с тестировании нам придётся убедиться, что каждый наследуемый метод работает правильно. А значит нам надо его протестировать.
А если бы мы сделали делегирование, то мы бы просто все замокали и проверили, что все работает.