Java 空对象模式是否违反了接口隔离原则?

Java 空对象模式是否违反了接口隔离原则?,java,c#,solid-principles,null-object-pattern,Java,C#,Solid Principles,Null Object Pattern,缔约国指出: 客户机不应该被迫依赖于他们不使用的方法 在空对象模式中,实现接口的空类对其不做任何处理。这是故意的 但是,这取决于它不使用的方法。或者它没有违反原则,因为它实际上只是依赖于它,在实现的方法中不做任何事情 空对象模式本身并没有破坏接口隔离原则 不是空对象可以打破整个原则,而是空对象的接口,它可能会或可能不会公开与注入对象的给定操作无关的成员 如果null对象实现了一个接口,并且项目的一部分可能使用一个常规对象及其成员的实际实现,并且该接口公开了实际需要的内容,那么该给定接口不会破坏接

缔约国指出:

客户机不应该被迫依赖于他们不使用的方法

在空对象模式中,实现接口的空类对其不做任何处理。这是故意的

但是,这取决于它不使用的方法。或者它没有违反原则,因为它实际上只是依赖于它,在实现的方法中不做任何事情

空对象模式本身并没有破坏接口隔离原则

不是空对象可以打破整个原则,而是空对象的接口,它可能会或可能不会公开与注入对象的给定操作无关的成员


如果null对象实现了一个接口,并且项目的一部分可能使用一个常规对象及其成员的实际实现,并且该接口公开了实际需要的内容,那么该给定接口不会破坏接口隔离原则。

通常,空对象模式不接受任何依赖项。以下是典型的空对象的外观:

public class NullDataStore : IDataStore
{
    public void StoreData(Data data)
    {

    }
}

本例中的
NullDataStore
类没有依赖项,因此它不依赖于它不使用的方法。因此它不会中断ISP。

客户端正在使用null对象上的方法。方法不做任何事情对客户端来说是不透明的;它们只是没有显著的效果。例如,如果接口指定了返回列表的方法,则该接口的null对象实现可以返回空列表。关键是,使用空对象的客户端确实调用了返回列表的方法,并且需要获取列表。谢谢Joshua和Andy。现在我有了更好的理解。一个更有趣的问题是:“空对象模式是否破坏了Liskov替换原理?”。