Если тебе поможет, то я понимаю интерфейсы таким образом:
Это име4на неких кусков программы, о которых ты можешь пояснить даже директору.
В качестве плюшки интерфейс еще и проверяет функционал. Из этого исходит что наша задача установить контейнеру зависимостей настройку что если на вход конструктора кинули интерфейс, надо создать обьект к нему привязанный.
Поскольку у тебя библиотеки две и делают одно и то же, тебе нужен класс обертка, который подобно переключателю может включить первую или вторую, а потом при вызове метода передать исполнителю, на котором сейчас переключатель
По итогу у тебя будет два интерфейса. Один на обертку с методом переключить, второй на функционал. Можно обойтись и без интерфейса на обертку, тогда неиудастся сделать абстрактный переключатель для любой штуки в программе, будешь писать под каждый включатель новый коасс