场景:有一个任务,周期执行,另外的程序可以查询它的最近一次的执行情况,并显示给客户。
没使用NullObject模式时代码是这样:
public class Task(){
private ExecuteResult lastExecuteResult = null;
public ExecuteResult getLastExecuteResult() {
return lastExecuteResult;
}
public void run(){
lastExecuteResult = runTask();
}
private ExecuteResult tunTask(){...}
}
public class Test(){
....
Task t;
....
ExecuteResult er=t.getLastExecuteResult();
if (er==null){
....
}
else
{
....
}
}解决:一切都是对象,甚至是null。建立一个"Null" Object 其实也可以认为是一个特殊的默认值。重构 Task和Test:
private static ExecuteResult NullExecuteResult=new ExecuteResult();
static {
NullExecuteResult.setSuccess(false);
NullExecuteResult.setErrorMsg("任务未执行,正在排队");
NullExecuteResult.setData("");
}
private ExecuteResult lastExecuteResult = NullExecuteResult;
public ExecuteResult getLastExecuteResult() {
return lastExecuteResult;
}重构后Test的代码
public class Test(){
....
Task t;
....
ExecuteResult er=t.getLastExecuteResult();
// if (er==null){
// ....
// }
// else
// {
....
// }
}减少了客户端编码的数量,提高了可维护性和类库的稳定性。Trackback: http://tb.donews.net/TrackBack.aspx?PostId=585923