Null Object(空对象)模式

系统 1714 0

 

      	Employee e = DB.getEmployee("Bob");
	//判断雇员e是否应该今天发薪水,如果是,则发
	if(e != null && e.isTimeToPay(today))
		e.pay();
    

 

  如果Bob对象不存在,e就是一个null,然后&&的第一个表达式会被首先求值,而仅当第一个表达式为true时才会对第二个表达式求值。而在很多情况下我们会忘 了对null进行检查判定。这种惯用方法虽然常见,但很丑陋。

通过用DB抛出一个异常而不是返回null可以减少出错的可能。不过try/catch块更加丑陋,所以我们可以用Null Object模式来解决这个问题。

Null Object(空对象)模式

 

 

      	Employee e = DB.getEmployee("Bob");
	//判断雇员e是否应该今天发薪水,如果是,则发
	if(e.isTimeToPay(today))
		e.pay();
    
 

 

 

      public class DB{
	public static Employee getEmployee(String name){
		Emplyee e = Sql.get(name);//从数据库中得到该name的对象
		if(e == null)
			return Employee.NULL;
		return e;
	}
}
    

 

 

 

      public interface Employee{
	public void pay();
	public boolean isTimeToPay(Date payDate);
	public static final Employee NULL = new Employee(){
		public boolean isTimeToPay(Date payDate){
			return false;
		}
		public void pay(){
		}
	}
}
    

  使用无效的雇员类成为一个匿名内部内是一个确保该类只有单一实例的方法。实际上并不存在NullEmployee类本身。其他任何人都无法创建无效雇员类的其他实例。

如果可以创建无效雇员类的多个实例,那么这种表达方式是不可靠的。


 

Null Object(空对象)模式


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论