Null Object模式的目的包括:
1. 当对象提供者无法提供指定类型的对象时, 返回一个什么都不做的对象, 这对调用者是透明的,并且调用者不用判断获得的对象是否为null了,当然,对象提供者必须告知调用者(通过约定等).
2. 有时候需要传递一个什么都不做的某个类型的对象给合作方. 例如某个函数需要实现特定
接口的对象(通过参数传入)进行某些操作, 该函数的调用者在某些情况下希望不进行这些操作,那么他就可以传进来一个实现了该接口但函数体全为空的对象,这个对象就是Null Object.
原本需要判断null时:
class="java">EventRecorder recorder = EventRecorderFactory.getRecorderByType(0);
if( recorder ==null ){
Log.error("Recorder对象为空");
lastErrorCode =0;
}
else{
recorder.record("记录点啥...");
}
用了Null Object后:
publicinterface EventRecorder{
publicvoid record(String event);
}
publicclass RecordEventToDatabase implements EventRecorder{
publicvoid record(String event);
// 记录内容到数据库中
}
}
publicclass RecordEventToFile implements EventRecorder{
publicvoid record(String event);
// 记录内容到文件中
}
}
publicclass NullEventRecorder implements EventRecorder{
publicvoid record(String event);
}
publicstatic EventRecorder getRecorderByType(int type){
EventRecorder recorder =null;
if(type ==0)
recorder =new RecordEventToDatabase();
elseif(type ==1)
recorder =new RecordEventToFile();
else
recorder =new NullEventRecorder(); // 这就是Null Object
return recorder;
}
摘自http://www.cnb
logs.com/west-link/archive/2011/07/08/2100691.html