digital-garden/dev/architecture/Interface Segregation Principle.md

57 lines
1.8 KiB
Markdown
Raw Normal View History

2024-09-27 20:25:32 +03:00
---
aliases:
- ISP
tags:
- maturity/🌱
date: 2024-09-27
zero-link:
- "[[../../meta/zero/00 Архитектура ПО|00 Архитектура ПО]]"
parents:
- "[[SOLID|SOLID]]"
linked:
---
Лучше создавать несколько специализированных интерфейсов, чем один универсальный интерфейс, который вынуждает реализовать ненужные методы. Каждый интерфейс должен описывать только те действия, которые будут использоваться конкретным клиентом.
- **Пример нарушения ISP**: Один интерфейс заставляет классы реализовывать методы, которые они не используют.
- **Решение**: Разделить интерфейс на несколько специализированных.
```java
public interface Worker {
void work();
void eat();
}
public class RobotWorker implements Worker {
public void work() {
// Робот работает
}
public void eat() {
// Робот не ест — нарушение ISP
}
}
```
Можно разделить интерфейсы:
```java
public interface Worker {
void work();
}
public interface Eater {
void eat();
}
```
***
## Мета информация
**Область**:: [[../../meta/zero/00 Архитектура ПО|00 Архитектура ПО]]
**Родитель**:: [[SOLID]]
**Источник**::
**Создана**:: [[2024-09-27]]
**Автор**::
### Дополнительные материалы
-
### Дочерние заметки
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->