我的Java代码中出现了多次以下模式,并且想知道你们中的一些人是如何重构它的。
Object obj1 = buildObj1();
if (obj1 != null) {
return obj1;
}
Object obj2 = buildObj2();
if (obj2 != null) {
return obj2;
}
Object obj3 = buildObj3();
if (obj3 != null) {
return obj3;
}
答案 0 :(得分:5)
因为Java没有一流的功能,所以你真正做的最好的事情就是拥有一个“构建东西”的界面,然后做这样的事情:
for (Builder<T> builder : builders) {
T obj = builder.build();
if (obj != null) return obj;
}
Builder界面就像:
public interface Builder<T> {
T build();
}
顶部代码段中的 builders
是Iterable<Builder<T>>
。
答案 1 :(得分:2)
该代码是否都以相同的方法顺序调用?您可以使用始终返回正确对象的Factory method(obj1,obj2或obj3)。您可以将每个buildObj()
方法的“null或real object”条件测试拉入此工厂方法,以便始终从新工厂方法中获取有效对象。
或者,如果您只是意味着在任何地方进行if (obj != null)
测试,则可以考虑使用Null对象模式:
不使用空引用来传达对象的缺失(例如,不存在的客户),而是使用实现预期接口但其方法体为空的对象。这种方法优于工作默认实现的优点是Null对象是非常可预测的并且没有副作用:它什么都不做。