Контракт нужен тогда, у когда твоих классов методы одинаковые. Например стандартный ларовский storage. В конфиге задал - это диск, s3 и т.д. а в коде не меняется ничего. Если же у тебя все методы основанные на бизнес логике разные - то контракт не нужен, а нужно три разных сервиса со своими методами