在以 C 語言為基礎的程式語言中,我們習慣讓函式在失敗的狀況下回傳空值null。有關各常見語言如何判斷 null 可以參考這篇文章。當確認無誤之後才能安心地對物件進行操作,否則程式遲早會炸掉,即使沒爆也是顆不定時炸彈,天天提心吊膽進行拆彈。
Creature c = world.getCreature(x, y);if( c != null && c.isDead() == false ) c.act();
不知道這樣確認的動作算不算 Design by Contract,不過每拿到一個回傳值就要先判斷是否為 null 也是件惱人的事,程式看起來也很不優雅。這時候若是使用支援OO的語言,就可以使用 Null Object Pattern 。這個 pattern 最早出自於這篇論文,並沒有被收錄於天書GoF中,不過有些軟工相關的書會提到它。大致上的做法就是透過繼承的方式,產生一個沒有任何行為的 Null Object。

Java可以使用inner class的方式實作,如此一來還可以確保只有一個單一 NULL Object 實體。
public interface Creature{ public boolean isDead();
public static final Creature NULL = new Creature() { public boolean isDead() { return true; } }}
if( c == Creature.NULL ) { … }




