简单来说,null object模式就是为对象提供一个指定的类型,来代替对象为空的情况。说白了就是解决对象为空的情况,提供对象"什么也不做"的行为,这种方式看似无聊,但却是很聪明的解决之道。举例来说,一个User类型对象user需要在系统中进行操作,那么典型的操作方式是:
if (user != null){
manager.SendMessage(user);
}
这种类似的操作,会遍布于你的系统代码,无数的if判断让优雅远离了你的代码,如果大意忘记null判断,那么只有无情的异常伺候了。于是,Null object模式就应运而生了,对User类实现相同功能的NullUser类型,就可以有效的避免繁琐的if和不必要的失误:
二者的差别体现在哪儿呢?
其实主要的思路就是将null value转换为null object,把对user == null这样的判断,转换为user.IsNull虽然只有一字之差,但是本质上是完全两回事儿。通过null object模式,可以确保返回有效的对象,而不是没有任何意义的null值。同时,"在执行方法时返回null object而不是null值,可以避免NullReferenceExecption异常的发生。"。
null object 模式的小结
•有效解决对象为空的情况,为值为null提供可靠保证。
•保证能够返回有效的默认值,例如在一个IList<User> userList中,能够保证任何情况下都有有效值返回,可以保证对userList操作的有效性。
•提供统一判定的IsNull属性。可以通过实现INullable接口,也可以通过Extension Method实现IsNull判定方法。
•null object要保持原object的所有成员的不变性,所以我们常常将其实现为Sigleton模式。
•Scott Doman说"在执行方法时返回null object而不是null值,可以避免NullReferenceExecption异常的发生",这完全是对的。
喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!