空对象、模拟对象和桩

      一个空对象,指的是一个没有赋值过,但是却在内存中存在,为了在逻辑上表示“没有这个对象但是却为这个对象准备了一个位置”,在物理上代替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 空对象 {

}
 

 

模拟对象是轻量级的,自检测的。

        桩因为要返回桩数据,所以有很多复杂的操作,是一个重量级的。

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值