57 lines
1.8 KiB
Markdown
57 lines
1.8 KiB
Markdown
|
---
|
||
|
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) -->
|