Tag: null object pattern

空对象模式

似乎有越来越多的人说你永远不应该返回null,而应该总是使用Null对象模式。 我可以在使用集合/ map /数组或调用布局函数(如isAuthenticated()时看到NOP的有用性, 如下所示) 。 我没有发现任何完全令人信服的东西。 当我试着整理自己的想法时,请在这里忍受我。 我的理解是,您返回一个已被“清零”的有效对象,而不是返回一个空对象。 因此,例如,客户端将调用以获取对象: Car car = getCar(); 如果不使用NOP,则需要在调用其上的任何方法之前检查从getCar()返回的对象是否为null: if (car != null){ color = car.getColor(); doScreenStuff(color); } 使用NOP而不是getCar()返回null,它现在返回一个已被有效“清零”的Object。 所以现在我们不再需要做if (car != null)并且可以只请求颜色。 因此,我认为当我们调用颜色时,我们的“归零”对象将返回“无”。 这有什么用? 似乎向前移动并在空对象上调用方法会导致像检查null一样痛苦。 现在,当需要显示信息时,我们需要检查颜色是不是“无”,高度不是0,或者你有什么其他值。 因此,基本上,如果汽车为空,则不检查处理的开始,而是检查我们拥有的汽车对象是真车还是替代品。 IE我们不想显示一堆空对象,所以我们需要一些方法来过滤掉所有空对象。 这个过滤是一个额外的步骤,就像调用if(car!= null)一样。 唯一的区别是,通过检查null,我们可以在通过抛出exception发现car对象为空时立即停止处理,而使用NOP,我们在空对象上调用方法并继续前进,直到它到达时间为止显示对象,此时我们过滤掉空。 此外,您需要知道空对象返回的值。 IE确实getColor()返回“none”或“empty”。 显然必须有一些我忽略的东西。 提前致谢。