java - 与接口(interface)隔离原则相反

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

我今天在采访中被问到什么是接口(interface)隔离原则以及与之相反的情况或原则是什么。

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

最佳答案

来自维基百科:

The interface-segregation principle (ISP) states that no client should be forced to depend on methods it does not use.

与之相反的是客户端被迫依赖于它不使用的方法。这可能表现为实现一个它不需要的接口(interface),该接口(interface)的方法层太宽,或者一个类定义了几个客户端不需要的抽象方法。

一个例子(首先是接口(interface)):

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;
    }
}

关于java - 与接口(interface)隔离原则相反,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29132163/

相关文章:

java - 关于静态方法和调用堆栈的问题

java - 运行maven test命令时没有测试运行

java - 使用 MEL 在 Java 负载上调用方法

javascript - Angular 组件启动时初始化函数的模式

objective-c - 来自 C#/Java 世界的 iOS 设计模式等价物?

java - 如何在 WildFly 上禁用 WELD

c++ - (De/)序列化作为 C++ 中基于文件的数据交换的接口(interface)

separation-of-concerns - 单一责任原则与关注点分离的区别

java - 试图理解 Liskov 替换原理

c# - 使用其关系中的属性为子类建模的正确方法