空对象模式是否打破了接口隔离原则?

Does Null Object Pattern break Interface Segregation principle?

Interface Segregation principle 指出:

Clients should not be forced to depend on methods that they do not use.

在 Null 对象模式中,实现接口的 Null class 对它没有任何作用。这是故意的。

但是,这取决于它不使用的方法。还是它没有违反原则,因为它实际上只是通过不在已实现的方法中执行任何操作而仅依赖于它?

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

能打破整个原则的不是空对象,而是空对象的接口,它可能暴露也可能不暴露与注入对象的给定操作无关的成员。

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

通常,Null 对象模式不采用任何依赖关系。下面是一个典型的 Null 对象的样子:

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

    }
}

本例中的 NullDataStore class 没有依赖关系,因此它不依赖于它不使用的方法。所以它不会破坏 ISP。