空物件模式(Null Object Pattern)。
阿新 • • 發佈:2018-11-08
定義
空物件模式是通過實現一個預設的無意義物件來避免null值出現,簡單的說,就是為了避免在程式中出現null值判斷而誕生的一種常用設計方法。
示例
舉個簡單的例子來說明,我們寫一個聽動物叫聲的模擬程式,如下所示。
public interface Animal { /** * 動物叫聲 */ void makeSound(); } public class Dog implements Animal { @Override public void makeSound() { System.out.println("Wang Wang Wang"); } }
然後再定義一個人來聽動物的叫聲,如下所示。
public class Person {
/**
* 聽到動物的叫聲
*
* @param animal
*/
public void hear(Animal animal) {
if (animal != null) {
animal.makeSound();
}
}
}
在一個完整的系統中,animal物件是如何產生?什麼原因會產生null值?如果我們能夠控制null值的產生,是不是就可以去掉這個控制判斷了?那這樣,程式是不是更yi7讀更簡單?好,我們就編寫一個更完美的程式,增加一個NullAnimal類,如下所示。
public class NullAnimal implements Animal {
@Override
public void makeSound() {
}
}
增加了NullAnimal類後,在Person類中就不需要“animal != null”這句話了,因為我們提供了一個實現介面的所有方法,不會再產生null物件。想象一個Web專案中,animal物件可能由MVC框架對映產生,我們只要定義一個預設的對映物件是NullAnimal,就可以解決空值判斷的問題,提升程式碼的可讀性。這就是空物件模式(一些專案組把他作為編碼規範的一部分),非常簡單,但非常實用。
最佳實踐
空物件模式是通過空程式碼實現一個介面或抽象類的所有方法,以滿足開發需求,簡化程式。他如此簡單,以至於我們經常在程式碼中看到和使用,對他已經熟視無睹了,而他無論是事前規劃或事後重構,都不會對我們的程式碼產生太大沖擊,這也是我們“藐視”他的根本原因。