Main Contents

Null Object Pattern

作者:ShepJeng | 觀看文章來源 | 拜訪作者網站
關於作者
I'm Mr. Croissant.

在以 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 ) { … }

讀過本文的讀者, 也對以下文章有興趣

抱歉,本篇的迴響表單已關閉。回應請至作者網頁



Feed