我更喜欢哪种模式?

时间:2011-11-10 09:59:25

标签: java design-patterns null null-object-pattern

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

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

我发现了一些关于Null Object模式的文章(比如this),我想知道 - 是否有可能创建Null Object(作为模式),它可以存储多个状态,如null outdated,null没有过时,不是过时而不是过时没有过时。

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

2 个答案:

答案 0 :(得分: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

它适用于你的情况吗?

答案 1 :(得分:2)

你想要区分(其中包括)“null outdated”和“null not adated” 这意味着您建议两个不同的Null对象,具有不同的行为。这违反了模式,该模式表明Null对象应该具有一种行为,这是它的未初始化对象的默认行为。

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