Абстракция скрывает реализацию, но выставляет контракт.
Сказав, что теперь давайте посмотрим, как.Предположим, вы несете ответственность за реализацию бизнес-логики.Теперь вам, вероятно, понадобится некоторое время на построение логики, то же самое модульное тестирование, то же самое на рефакторинг логики, опять же модульное тестирование.Между тем другой команде (или товарищу по команде) необходимо использовать написанную вами логику, но теперь они хотят дождаться завершения вашей логической реализации.
В таком случае вы бы выставили объектТип и его поведение.Тип объекта и поведение становится контрактом, интерфейсом.Интерфейс состоит из его имени и абстрактных методов.Интерфейсы - это не что иное, как предопределенный контракт.Это то, что исправлено, но его реализация может измениться, но поскольку договор является фиксированным, следовательно, изменение всегда придерживается договора, и те, кто зависят от договора, не затрагиваются этим изменением.Имя интерфейса становится типом объекта (конкретный тип будет определен позже).Так что теперь, когда интерфейс открыт, теперь идет часть потребления.
Пользователи вашего кода будут использовать указанный вами контракт.Они, не зная реализации classs, не могут выполнить new
, поэтому они потребляют вашу реализацию путем внедрения зависимостей (просто с помощью методов конструктора или сеттера).Даже если потребительский код знает класс реализации сегодня, все же следует избегать зависимости от реализации, поскольку она может измениться завтра.Это зависит от контракта, который является фиксированным.