空对象模式
似乎有越来越多的人说,你永远不应该返回null,而应该始终使用Null对象模式。我可以看到NOP在使用集合/映射/数组或调用布尔函数(如isAuthenticated())时的有用性,如下所示。
我没有发现任何完全令人信服的东西。在这里忍受我,因为我试图组织我的想法。
我的理解是,您不是返回空对象,而是返回一个已被“清零”的有效对象。
例如,客户端将调用以获取对象:
Car car = getCar();
如果不使用 NOP,则需要在调用其上的任何方法之前检查从 getCar() 返回的对象是否为 null:
if (car != null){
color = car.getColor();
doScreenStuff(color);
}
使用 NOP,它现在不返回 null,而是返回一个已有效“清零”的对象。所以现在我们不再需要做,可以只要求颜色。所以,我想当我们调用颜色时,我们的“归零”对象将返回“无”。getCar()
if (car != null)
这有什么帮助?似乎继续前进并在空对象上调用方法会导致与仅检查null一样痛苦。现在,当需要显示信息时,我们需要检查颜色不是“无”,高度不是0,或者你拥有的任何其他值。因此,从本质上讲,如果汽车为空,则无需在处理开始时进行检查,而是在之后检查我们拥有的汽车对象是真正的汽车还是替代品。也就是说,我们不想显示一堆空对象,因此我们需要某种方法来过滤掉所有空对象。
此筛选是一个附加步骤,就像调用 if (car != null) 一样。唯一的区别是,通过检查null,我们可以在发现car对象为null时立即通过抛出异常来停止处理,而使用NOP,我们在空对象上调用方法并继续摇摆,直到是时候显示对象,此时我们过滤掉空。此外,您需要知道空对象返回的值。即 getColor() 返回 “none” 或 “empty”。
显然,我一定忽略了一些东西。提前致谢。