2 Вариант
Роберт Мартин
Полиморфный
паттерн
прототип рейшена
работать нужно в обратную сторону 1 варианта
код1 старая реализация
интерфейс1 интерфейс для старой реализации
код клиентский код
должен зависеть от интерфейс1, который неизменный
код2 новая реализация
интерфейс2=интерфейс1 реализует тот же интерфейс
возможно делегируя вызывание работу код1
может наследоваться от код1
имплементирует интерфейс1 для того, чтобы не переписывать код, чтобы он оставался таким же в не зависимости от того какие изменения внесёте в код1 и код2