我最近看了这个关于 Null Object 设计模式的youtube 教程。尽管其中有一些错误:例如不做任何事情的 NullCar 创建了一个无限循环,但这个概念得到了很好的解释。我的问题是,当可以为 null 的对象具有 getter 并在您的代码中使用时,您会怎么做?你怎么知道默认返回哪个值?或者我应该在所有对象中实现这个模式?如果我需要返回字符串或原语怎么办?我是从 Java 的角度说的。
编辑:我不会为默认值测试交易空对象测试吗?如果没有,为什么不呢?
我最近看了这个关于 Null Object 设计模式的youtube 教程。尽管其中有一些错误:例如不做任何事情的 NullCar 创建了一个无限循环,但这个概念得到了很好的解释。我的问题是,当可以为 null 的对象具有 getter 并在您的代码中使用时,您会怎么做?你怎么知道默认返回哪个值?或者我应该在所有对象中实现这个模式?如果我需要返回字符串或原语怎么办?我是从 Java 的角度说的。
编辑:我不会为默认值测试交易空对象测试吗?如果没有,为什么不呢?
据我了解,这个想法是空对象的值尽可能接近“无”。不幸的是,这意味着您必须自己定义它。举个例子,当我不能传递一个空字符串时,我个人使用“”,我的空对象编号是-1(主要是因为默认情况下大多数数据库序列从 1 开始,我们将这些用于项目 id:sa lot so -1是死赠品,它是一个空对象),列表/地图/集合它是Collections.EMPTY_SET
,EMPTY_MAP
或者EMPTY_LIST
等等等等。如果我有自定义类,我必须从中创建一个空对象,我会从中删除所有实际数据,看看它会把我带到哪里,然后应用我刚才提到的内容,直到它“空”。
所以你真的不“知道”默认返回哪个值,你只需要自己决定。
当可以为 null 的对象具有 getter 并在您的代码中使用时,您会怎么做?你怎么知道默认返回哪个值?
你怎么知道要实现哪些类?这是一个设计问题,它取决于应用程序。
一般而言,NullObject 模式的目的是在条件是与编程语言的空值进行比较的特殊情况下支持用多态性替换条件重构。
视频中示例的正确实现需要将driveCar
方法委托给Car
类。SlowCar
和类将FastCar
执行循环,大概是通过基类中的共享实现,并且NullCar
会立即返回。
在 Java 上下文中,该NullCar.speed
属性可能是未装箱的 int。因此,将其设置null
为不是一种选择。我可能会将属性隐藏在访问器后面,并NullCar.getSpeed
引发异常。任何需要测试以避免此异常的客户端代码都将移入汽车类。
Null 设计模式在代码中的集成点应该是什么?我认为 DAO 对象是这种设计模式的第一级客户端,因为它们在数据库中查找实体并简单地返回它。
这些对象的可空性检查会污染实际访问和使用它们的服务层或命令层中的代码。
请给出意见。
它应该为您获得的类返回空对象。例如,如果您有一个A
带有返回类对象的 getter 的类B
,则相应NullA
的 getter 应该返回NullB
。