Тема: Расширение функционала путем наследования и инверсия управления
Для изменения и дополнения классов используется наследование, однако здесь его применить не удается. Если я создам наследника какого-то класса, то остальные классы системы об этом не узнают, и будут продолжать использовать оригинальный класс. Проблемы можно избежать, если методы будут манипулировать не конкретными классами, а интерфейсами, а объекты будут создаваться не по месту использования с указанием конкретного класса, а при помощи некого настраиваемого программного механизма, и можно будет указать, какой класс для реализации какого интерфейса использовать.
По ссылкам более детально о том, что я имею в виду:
https://ru.wikipedia.org/wiki/%D0%98%D0 … 0%B8%D1%8F
https://habrahabr.ru/post/132084/