Вопрос проверяет понимание принципа разделения интерфейсов (Interface Segregation Principle) из SOLID, который помогает создавать гибкие и поддерживаемые системы.
Принцип разделения интерфейсов (Interface Segregation Principle, ISP) — это четвертый принцип SOLID, сформулированный Робертом Мартином. Он утверждает, что ни один клиент не должен зависеть от методов, которые он не использует. Другими словами, лучше иметь несколько узкоспециализированных интерфейсов, чем один большой и универсальный.
Когда интерфейс содержит слишком много методов, классы, которые его реализуют, вынуждены определять даже те методы, которые им не нужны. Это приводит к следующим проблемам:
Представьте интерфейс для многофункционального устройства:
interface MultiFunctionPrinter {
void print(Document d);
void scan(Document d);
void fax(Document d);
}Если класс SimplePrinter реализует этот интерфейс, ему придется реализовать методы scan и fax, которые не имеют смысла для простого принтера. Это нарушает ISP.
Разделим интерфейс на несколько специализированных:
interface Printer {
void print(Document d);
}
interface Scanner {
void scan(Document d);
}
interface Fax {
void fax(Document d);
}Теперь класс SimplePrinter реализует только интерфейс Printer, а класс MultiFunctionPrinter может реализовать все три интерфейса. Это делает систему более гибкой и легкой для расширения.
Принцип разделения интерфейсов помогает создавать слабосвязанные и легко поддерживаемые системы. Его стоит применять при проектировании API, библиотек и любых абстракций, где клиенты имеют разные потребности. Следуя ISP, вы уменьшаете количество ненужных зависимостей и делаете код более устойчивым к изменениям.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию