5

在我们的项目中,我们需要存储一些对象(例如 User),并且 User 类必须有一个验证标志(setOutdated 和 isOutdated 等方法)

有时,我们的 User 对象可能为 null,但在这种情况下验证标志必须是可访问的。可以从 User 类中提取这些方法,但由于语义,该字段和方法必须在该类中。

我发现了一些关于 Null Object 模式的文章(像这样),我想知道 - 是否可以创建 Null 对象(作为一种模式),它可以存储几种状态,如 null 过时、null 未过时、null 过时和not null 没有过时。

PS:如果在我的班级中引入“过时”字段,则很难清除对象而不是将其设置为 null

4

2 回答 2

2

我的第一个想法是添加一个 UserUtil 类(名称可能是别的)。

和类似的方法

public static boolean isUserOutdated(User u){
return (u==null)? true :u.isOutdated();

}

 or return (u==null)? false :u.isOutdated(); depends on your businesslogic

它适用于你的情况吗?

于 2011-11-10T10:11:55.963 回答
2

您想要区分(除其他外)“null outdated”和“null not outdated”。
这意味着您建议两个具有不同行为的不同 Null 对象。这违反了 Null 对象应该具有一种行为的模式,即该类未初始化对象的默认行为。

我建议您要么使用@Kent 提供的解决方案,要么让您的用户对象类似于“PresentUser”和“FormerUser”对象。后者在技术上与您自己提出的解决方案相同,但它不是空对象模式。

于 2011-11-10T10:20:42.890 回答