空对象模式

在空对象模式(Null Object Pattern)中,一个空对象取代 NULL 对象实例的检查。Null 对象不是检查空值,
而是反应一个不做任何动作的关系。这样的 Null 对象也可以在数据不可用的时候提供默认的行为。

Class Diagram

Implementation

抽象对象

1
2
3
4
public abstract class AbstractObject {
public abstract void request();
public abstract boolean isNil();
}

对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class RealObject extends AbstractObject {
@Override
public void request() {
System.out.println("do something ");
}

@Override
public boolean isNil() {
return false;
}
}

public class NullObject extends AbstractObject {
@Override
public void request() {
// do nothing
}

@Override
public boolean isNil() {
return true;
}
}

对象工厂

1
2
3
4
5
6
7
8
9
10
public class ObjectFactory {

public static AbstractObject getObject(String type){
if(type != null && !"".equals(type)){
return new RealObject();
}else{
return new NullObject();
}
}
}

测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class NullObjectTest {
@Test
public void test() throws Exception {

AbstractObject real = ObjectFactory.getObject("real");
if (!real.isNil()) {
real.request();
}

AbstractObject nul = ObjectFactory.getObject("");
if (!nul.isNil()) {
nul.request();
}
}
}

Reflence