界面隔离原理的对立面

时间:2015-03-18 20:37:24

标签: java design-patterns solid-principles interface-segregation-principle

我今天在接受采访时被问到什么是界面隔离原则以及与此相反的情况或原则是什么。

ISP对我来说很清楚,但我不知道问题的第二部分,与ISP相反的原则是什么?

1 个答案:

答案 0 :(得分:3)

来自维基百科:

  

接口隔离原则(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;
    }
}