Инициал «I» означает «Interface segregation principle», что значит «Принцип разделения интерфейса». Это означает что клиенты не должны зависеть от интерфейсов, которые они не используют (что нужно создавать только небольшие и узконаправленные интерфейсы, не перегруженные ненужными методами).
Как следовать принципу ISP
Каждый интерфейс должен существовать для определенных задач и содержать только те методы, которые эти задачи решают.
Пример с нарушением принципа:
interface Document {
void open();
void save();
void close();
}
class TextEditor implements Document {
public void open() {
// Открыть документ
}
public void save() {
// Сохранить документ
}
public void close() {
// Закрыть документ
}
}
Пример с правильным использованием принципа:
interface Openable {
void open();
}
interface Savable {
void save();
}
interface Closable {
void close();
}
// Каждый класс выполняет только то что ему нужно и
// наследуется только от тех что будет использоваться
class TextEditorOne implements Openable, Closable {
public void open() {
// Открыть документ
}
public void close() {
// Закрыть документ
}
}
class TextEditorTwo implements Savable, Closable {
public void save() {
// Сохранить документ
}
public void close() {
// Закрыть документ
}
}