空對象、模擬對象和樁

      一個空對象,指的是一個沒有賦值過,但是卻在內存中存在,爲了在邏輯上表示“沒有這個對象但是卻爲這個對象準備了一個位置”,在物理上代替null所準備的對象。

      在任何一個使用引用的地方,都有可能出現空指針異常,所以在沒有辦法確認是否一定可以得到引用的地方,就一定要做null檢查,這本身是枯燥乏味,沒有任何意義的。空對象因爲在內存中存在,所以即使它在邏輯上沒有任何意義,也可以在物理上加上一些附加信息,比如“這裏沒有一個對象”的提示語等等。

 

      構造空對象是Java RTTI思想的一種實現形式,卻不是內置的。

 

一個小例子:

 

 

interface NULL
{}

class Person 
{   String name;
    public Person(String name)
    {
    	this.name = name;
    }

	public static class NullPerson//這是一個靜態嵌套類,意味着所有的對象都共用這樣一個成員。因爲反正爲空,可以節省一些空間。
	extends Person //表明他可以接受 instanceof(Person)的檢驗。
	implements NULL//表明他可以接受 instanceof(NULL)的檢驗。
	{
		private NullPerson()
		{
			super("沒有這個人。");
		}
		public String toString()
		{
			return ("沒有這個人。");
		}
	}
	public static final Person NULL = new NullPerson();//這是一個靜態嵌套對象,意味着所有的對象都共用這樣一個成員。因爲反正爲空,可以節省一些空間。
	//注意!!這裏的private的構造器本身是爲了單例模式所準備的。但是因爲NullPerson是一個內部類,所以可以調用它的構造函數。
}

public class 空對象 {

}
 

 

模擬對象是輕量級的,自檢測的。

        樁因爲要返回樁數據,所以有很多複雜的操作,是一個重量級的。

        相比之下,空對象的目的明確的多,也巧妙、智能得多。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章