我最近观看了这个关于空对象设计模式的youtube教程。尽管其中存在一些错误,比如什么也不做的NullCar会创建一个无限循环,但是概念解释得很好。我的问题是,当可以为空的对象具有getter并在您的代码中使用时,您该怎么办?如何确定默认返回哪个值?或者我应该在所有对象中实现此模式吗?如果我需要返回字符串或原始数据类型怎么办?我从Java的角度来谈论。
编辑:我不是在用默认值测试来交换空对象测试吗?如果不是,为什么不是?
Collections.EMPTY_SET
,EMPTY_MAP
或EMPTY_LIST
等等。如果我有一个自定义类需要创建空对象,我会将其所有实际数据删除,然后观察结果并应用上述方法,直到它变为空对象。NullCar.speed
属性可能是一个未装箱的int。因此,将其设置为null
不是一种选择。我可能会将该属性隐藏在访问器后面,并使NullCar.getSpeed
引发异常。任何需要测试以避免此异常的客户端代码都将转移到汽车类中。应该返回你正在获取的类的 null 对象。例如,如果你有一个类 A
,它有一个 getter 返回一个类 B
的对象,那么相应的 NullA
的 getter 应该返回 NullB
。
在代码中,Null设计模式的集成点应该是什么?我认为DAO对象是这种设计模式的第一级客户端,因为它们在数据库中查找实体并简单地返回它。
这些对象的可空性检查会污染服务层或命令层中实际访问和使用它们的代码。
请发表评论。