Java 空对象模式在没有检查的情况下有意义吗?
如果根据,仍然使用对空对象的检查,这仍然是对空对象模式的合法使用,还是已经违反了它Java 空对象模式在没有检查的情况下有意义吗?,java,design-patterns,null,Java,Design Patterns,Null,如果根据,仍然使用对空对象的检查,这仍然是对空对象模式的合法使用,还是已经违反了它 public class Example { private static final Example NULL = new Example(new Object()); public static Example getNull() { return NULL; } private Object member; public Example(Object me
public class Example {
private static final Example NULL = new Example(new Object());
public static Example getNull() {
return NULL;
}
private Object member;
public Example(Object member) {
this.member = member;
}
}
public class Manager {
public operation(Example example) {
if(Example.getNull().equals(example) == false) {
doSomething(example);
}
}
}
理想情况下,可以使用
doSomething(示例)
直接调用空对象,而无需检查。但是如果需要这样的检查,那么避免null
还是有意义的吗?在我看来,应该使用null对象模式来避免检查是否缺少值。Null对象
的职责是在没有可用值的情况下正确操作。例如,如果一个方法处理集合的每个项,而不是在没有可用项的情况下使用null
,并检查null
,以避免在每个元素上重复,则将空集合用作null对象
。这样就不需要实施特殊情况
如果代码检查null
或引用是null对象
,那么null对象模式
在我看来,应该使用null对象模式
来避免检查是否缺少值。Null对象
的职责是在没有可用值的情况下正确操作。例如,如果一个方法处理集合的每个项,而不是在没有可用项的情况下使用null
,并检查null
,以避免在每个元素上重复,则将空集合用作null对象
。这样就不需要实施特殊情况
如果代码检查null
或引用是null对象
,那么null对象模式
在我看来,应该使用null对象模式
来避免检查是否缺少值。Null对象
的职责是在没有可用值的情况下正确操作。例如,如果一个方法处理集合的每个项,而不是在没有可用项的情况下使用null
,并检查null
,以避免在每个元素上重复,则将空集合用作null对象
。这样就不需要实施特殊情况
如果代码检查null
或引用是null对象
,那么null对象模式
在我看来,应该使用null对象模式
来避免检查是否缺少值。Null对象
的职责是在没有可用值的情况下正确操作。例如,如果一个方法处理集合的每个项,而不是在没有可用项的情况下使用null
,并检查null
,以避免在每个元素上重复,则将空集合用作null对象
。这样就不需要实施特殊情况
如果您的代码检查null
或引用是null对象
,那么null对象模式不会给您带来任何好处
我认为检查null是有效的,只要它很少发生。如果检查是系统性的,那么您显然得不到任何好处,但是有必要对某些特定的情况进行检查
在您的示例中,使用该模式将导致以下代码:
public class Manager {
public operation(Example example) {
example.doSomething(example); // does nothing when example is the Null Object
}
}
但是由于doSomething
不是对象的方法,因此可能需要进行检查(当然,这取决于此方法的作用)。我认为检查Null是有效的,只要它很少发生。如果检查是系统性的,那么您显然得不到任何好处,但是有必要对某些特定的情况进行检查
在您的示例中,使用该模式将导致以下代码:
public class Manager {
public operation(Example example) {
example.doSomething(example); // does nothing when example is the Null Object
}
}
但是由于doSomething
不是对象的方法,因此可能需要进行检查(当然,这取决于此方法的作用)。我认为检查Null是有效的,只要它很少发生。如果检查是系统性的,那么您显然得不到任何好处,但是有必要对某些特定的情况进行检查
在您的示例中,使用该模式将导致以下代码:
public class Manager {
public operation(Example example) {
example.doSomething(example); // does nothing when example is the Null Object
}
}
但是由于doSomething
不是对象的方法,因此可能需要进行检查(当然,这取决于此方法的作用)。我认为检查Null是有效的,只要它很少发生。如果检查是系统性的,那么您显然得不到任何好处,但是有必要对某些特定的情况进行检查
在您的示例中,使用该模式将导致以下代码:
public class Manager {
public operation(Example example) {
example.doSomething(example); // does nothing when example is the Null Object
}
}
但是由于doSomething
不是对象的方法,因此可能需要进行检查(当然,这取决于此方法的作用)。作为API发布的public
façade方法应该检查非空参数;如果其中一个为null,并且您为其设想了null对象模式,那么这些方法应该将其替换为null对象实例(可以作为“默认情况”)并将其转发给后端方法,因此后端方法不需要进行该检查。作为API发布的public
façade方法,应检查非空参数;如果其中一个为null,并且您为其设想了null对象模式,那么这些方法应该将其替换为null对象实例(可以作为“默认情况”)并将其转发给后端方法,因此后端方法不需要进行该检查。作为API发布的public
façade方法,应检查非空参数;如果其中一个为null,并且您为其设想了null对象模式,那么