Null Object模式的目的包括:
1. 当对象提供者无法提供指定类型的对象时, 返回一个什么都不做的对象, 这对调用者是透明的,并且调用者不用判断获得的对象是否为null了,当然,对象提供者必须告知调用者(通过约定等).
2. 有时候需要传递一个什么都不做的某个类型的对象给合作方. 例如某个函数需要实现特定接口的对象(通过参数传入)进行某些操作, 该函数的调用者在某些情况下希望不进行这些操作,那么他就可以传进来一个实现了该接口但函数体全为空的对象,这个对象就是Null Object.
原本需要判断null时:
用了Null Object后:
摘自[url]http://www.cnblogs.com/west-link/archive/2011/07/08/2100691.html[/url]
1. 当对象提供者无法提供指定类型的对象时, 返回一个什么都不做的对象, 这对调用者是透明的,并且调用者不用判断获得的对象是否为null了,当然,对象提供者必须告知调用者(通过约定等).
2. 有时候需要传递一个什么都不做的某个类型的对象给合作方. 例如某个函数需要实现特定接口的对象(通过参数传入)进行某些操作, 该函数的调用者在某些情况下希望不进行这些操作,那么他就可以传进来一个实现了该接口但函数体全为空的对象,这个对象就是Null Object.
原本需要判断null时:
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;
}
摘自[url]http://www.cnblogs.com/west-link/archive/2011/07/08/2100691.html[/url]
本文介绍了NullObject设计模式的原理及应用场景。通过实例说明如何利用NullObject模式简化代码逻辑,避免空指针异常,并展示了在不同场景下使用NullObject的具体实现。

1186

被折叠的 条评论
为什么被折叠?



