Противоположность принципа разделения интерфейса

Сегодня в одном из интервью меня спросили, что такое принцип сегрегации интерфейса и что противоположно этому случаю или принципу.

ISP для меня понятен, но я не знаю вторую часть вопроса, каков принцип, противоположный ISP?

1 ответ

Решение

Из Википедии:

Принцип сегрегации интерфейса (ISP) гласит, что ни один клиент не должен зависеть от методов, которые он не использует.

Противоположностью этому будет клиент, который вынужден зависеть от методов, которые он не использует. Это может проявиться либо в реализации интерфейса, который ему не нужен, в интерфейсе, имеющем методы на слишком широком уровне, либо в классе, в котором определены несколько абстрактных методов, которые не нужны клиенту.

Пример (сначала с интерфейсами):

public interface Book {

    String getAuthor();
    String getGenre();
    String getPageCount();
    String getWeight();
}

public interface EBook extends Book {
    // Oh no - ebooks don't have weight, so that should always return zero!
    // But it makes no sense to include it as an attribute of the interface.
}

Пример с абстрактными методами:

public abstract class Shape {

    public abstract double getVolume();
    public abstract double getHeight();
    public abstract double getLength();
    public abstract double getWidth();
    public abstract Color getColor();
}

public class Line extends Shape {

    public double length;
    public Color color;

    // Kind of forced to have a volume...
    public double getVolume() {
        return 0;
    }

    /// ...and a height...
    public double getHeight() {
        return 0;
    }

    // ...and a width...
    public double getWidth() {
        return 0;
    }

    public double getLength() {
        return length;
    }

    public Color getColor() {
        return color;
    }
}
Другие вопросы по тегам