frank oo java

我爱oo,我爱java。http://oofrank.blogchina.com

My Links

Blog统计

公告

欢迎到 oofrank@blogchina 来 QQ:421057986 email:oofrank@163.com
www.flickr.com
oofrank@flickr with my S9500

Free Download Manager
Free Download Manager

文章

收藏

相册

IT

other

存档


正在读取评论……

场景:有一个任务,周期执行,另外的程序可以查询它的最近一次的执行情况,并显示给客户。
没使用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


[点击此处收藏本文]  发表于2005年10月12日 4:23 PM




正在读取评论……
大名
网址
验证码
评论