1. 程式人生 > >空物件模式(Null Object Pattern)。

空物件模式(Null Object Pattern)。

定義

空物件模式是通過實現一個預設的無意義物件來避免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,就可以解決空值判斷的問題,提升程式碼的可讀性。這就是空物件模式(一些專案組把他作為編碼規範的一部分),非常簡單,但非常實用。

最佳實踐

空物件模式是通過空程式碼實現一個介面或抽象類的所有方法,以滿足開發需求,簡化程式。他如此簡單,以至於我們經常在程式碼中看到和使用,對他已經熟視無睹了,而他無論是事前規劃或事後重構,都不會對我們的程式碼產生太大沖擊,這也是我們“藐視”他的根本原因。