4. I — Interface Segregation Principle (Принцип разделения интерфейсов)

4. I — Interface Segregation Principle (Принцип разделения интерфейсов)

Клиенты не должны зависеть от интерфейсов, которые они не используют.

Лучше несколько маленьких интерфейсов, чем один громоздкий.
Каждый интерфейс должен описывать только то поведение, которое действительно нужно конкретному классу.

// Нарушение
interface Worker {
    void work();
    void eat();
}

class Robot implements Worker {
    public void work() { System.out.println("Работает"); }
    public void eat() { /* Робот не ест */ throw new UnsupportedOperationException(); }
}

// Правильно
interface Workable { void work(); }
interface Eatable { void eat(); }

class Human implements Workable, Eatable {
    public void work() {}
    public void eat() {}
}

class Robot implements Workable {
    public void work() {}
}


Автор: к.п.н., Румянцев Сергей Александрович, доцент Финансового университета при Правительстве РФ; доцент ОЧУВО Международного инновационного университета; Консалтинг, управление разработкой ПО; системный и бизнес анализ; менеджмент; аналитиз данных; управление ИТ. Телефон для связи +79269444818 (мессенджеры)   Короткая ссылка:

4. I — Interface Segregation Principle (Принцип разделения интерфейсов)

Клиенты не должны зависеть от интерфейсов, которые они не используют.

Лучше несколько маленьких интерфейсов, чем один громоздкий.
Каждый интерфейс должен описывать только то поведение, которое действительно нужно конкретному классу.

// Нарушение
interface Worker {
    void work();
    void eat();
}

class Robot implements Worker {
    public void work() { System.out.println("Работает"); }
    public void eat() { /* Робот не ест */ throw new UnsupportedOperationException(); }
}

// Правильно
interface Workable { void work(); }
interface Eatable { void eat(); }

class Human implements Workable, Eatable {
    public void work() {}
    public void eat() {}
}

class Robot implements Workable {
    public void work() {}
}


https://webprogr.ru/~aFuEo
Короткая ссылка на новость:https://webprogr.ru/~aFuEo


// Пример кода
function hello(name) {
  console.log(`Hi, ${name}!`);
}
hello("Sergey");

Последние новости

Рейтинг@Mail.ru