ну допустим у тебя есть сервис рассылок
типа, уведомляшки отправляет юзерам, и ты пользуешься услугами какого-то стороннего сервиса, по апи (н.п. рассылка смс, почты) и у тебя таких сервиса два. Оба предоставляют одинаковые услуги - и почта, и смс, но у первого выгоднее почту, а у второго смски слать)
Но ты не поленился и в нескольких классах описал способ работы с этими сервисами (тип что куда отправлять, как и тд, ну подготовил крч все для работы) и тут такой оп, первый сервис отказал в почте..
И ты в одну строчку кода, при регистрации библиотеки (это в провайдерах находится) меняешь регистрацию с ондной библиотеки на другую. Во как тута было)
use App\Contracts\Libraries\Sms as SmsContract;
use App\Libraries\SmsCentre as SmsLibrary;
//use App\Libraries\Esputnik as SmsLibrary;
class Libraries extends Provider
{
public function register()
{
$this->app->singleton(SmsContract::class, function($app) {
return new SmsLibrary();
});
}
}
А теперь вызывая где-то в проэкте
SmsContract;
вызывается или SmsCentre или Esputnik ( в зависимости что тут зарегистрировал )