Из того, что я понимаю, вы используете интерфейс для обеспечения или гарантии
что когда класс использует интерфейс, этот класс будет иметь
методы, определенные в интерфейсе внутри этого класса.
На самом деле это только половина сделки (техническая часть). Также есть важная архитектурная половина, которая появляется, когда вы используете интерфейс, и выглядит так:
function feed(IAnimal $interface) {
// ...
}
(в качестве примера, в качестве примера также может быть использована "фабричная" функция, которая задокументирована для возврата экземпляра, реализующего IAnimal
).
Идея в том, что пользователь интерфейса говорит: «Я хочу, чтобы животное кормило. Мне все равно, летит ли оно, гуляет или ползет. Мне все равно, большое оно или маленькое. Я только заботьтесь о том, чтобы он разделял некоторые функции со всеми другими животными »- функции, которые будут включать определение интерфейса.
Другими словами, интерфейсы служат для абстрагирования контракта (интерфейса) от конкретной реализации (классов). Это дает разработчикам конкретных классов возможность свободно изменять, переименовывать, удалять и добавлять реализации, не нарушая код для пользователей интерфейса, что невозможно, если вы ссылаетесь на конкретные классы непосредственно в своем API.
Что касается интерфейса, который реализован только одним классом: недостаточно информации для принятия решения. Если в будущем возможно будет больше реализаций интерфейса, то это, безусловно, имеет смысл (например, интерфейс IHashFunction
будет иметь смысл, даже если Sha1HashFunction
были в настоящее время единственной доступной реализацией) , В противном случае он ничего не предлагает.