всё было переписано по варианту 1.1. Способы 1.2 и 1.3 не выглядят
сильно полезными чтобы связать два объекта во время выполнения. Методы разных объектов нужно было вызывать в зависимости от настроек контроллера. Сами объекты создавались динамически, чтобы не занимать память под то, что не понадобится.