`
zhaoImpulse
  • 浏览: 79476 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Null Object(空对象)模式

阅读更多

 

	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模式来解决这个问题。

 

 

	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类本身。其他任何人都无法创建无效雇员类的其他实例。

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


 

  • 大小: 46.6 KB
分享到:
评论

相关推荐

    空对象模式

    在空对象模式(Null Object Pattern)中,一个空对象取代 NULL 对象实例的检查。Null 对象不是检查空值,而是反应一个不做任何动作的关系。这样的 Null 对象也可以在数据不可用的时候提供默认的行为。 在空对象模式...

    C#对象为Null模式(Null Object Pattern)实例教程

    主要介绍了C#对象为Null模式(Null Object Pattern),以一个简单实例深入分析了C#为Null情况下的处理方法,需要的朋友可以参考下

    23种java版设计模式源码案例.zip

    23种java版设计模式源码案例.zip 0.目录 创建型模式(creational) 简单工厂(simplefactory) 动态工厂(dynamic) ...空对象模式(null object) 策略模式(strategy) 模板模式(template) 访问者模式(visitor)

    用Java实现23种设计模式

    空对象模式(Null Object Pattern) 策略模式(Strategy Pattern) 模板模式(Template Pattern) 访问者模式(Visitor Pattern) 4. J2EE 模式 MVC 模式(MVC Pattern) 业务代表模式(Business Delegate ...

    33种JAVA设计模式DEMO

    空对象模式(Null Object Pattern) 策略模式(Strategy Pattern) 模板模式(Template Pattern) 访问者模式(Visitor Pattern) 4 J2EE 模式 这些设计模式特别关注表示层。这些模式是由 Sun Java Center 鉴定的。 ...

    NullObject模式研究 (2013年)

    在许多面向对象的程序设计语言中,对象引用可能为空。...本文阐述了NullObject模式及其实现方式,针对空目标的单一实例化策略,给出了改进措施。NullObject模式对去除重复检测和减少空引用异常有较明显的效果。

    敏捷软件开发原则、模式与实践 C#版

    第21章 COMMAND模式和ACTIVE OBJECT模式:多功能与多任务 第22章 TEMPLATE METHOD模式和STRATEGY模式:继承和委托 第23章 FACADE模式和MEDIATOR模式 第24章 SINGLETON模式和MONOSTATE模式 第25章 NULL OBJECT模式 ...

    举例讲解Python中的Null模式与桥接模式编程

    我想每个人都有一种经历,为了获取某属性,但是有时候属性是None,那么需要你做异常处理, 而假如你想节省这样的条件过滤的代码,可以使用Null模式以减少对象是否为None的判断 python的例子 我举个不是很通用的例子...

    敏捷软件开发:原则、模式与实践

    第17章 NULL OBJECT模式 第18章 薪水支付案例研究:第一次迭代开始 第19章 薪水支付案例研究:实现 第四部分 打包薪水支付系统 第20章 包的设计原则 第21章 FACTORY模式 第22章 薪水支付案例研究(第2部分) 第五...

    python学习小技巧:举例讲解Python中的Null模式与桥接模式编程

    我想每个人都有一种经历,为了获取某属性,但是有时候属性是None,那么需要你做异常处理, 而假如你想节省这样的条件过滤的代码,可以使用Null模式以减少对象是否为None的判断 python的例子 我举个不是很通用的例子...

    敏捷软件开发:原则、模式与实践.pdf

    第17章 NULL OBJECT模式 第18章 薪水支付案例研究:第一次迭代开始 第19章 薪水支付案例研究:实现 第四部分 打包薪水支付系统 第20章 包的设计原则 第21章 FACTORY模式 第22章 薪水支付案例研究(第2部分) 第...

    超市管理系统java源码swing-king-design:23种java设计模式

    超市管理系统java源码swing 设计模式 0.目录 创建型模式(creational) ...空对象模式(null object) 策略模式(strategy) 模板模式(template) 访问者模式(visitor) 1.介绍 1.1 创建型模式(creational) 简单工

    敏捷软件开发:原则、模式与实践.pdf

    第十七章 NULL OBJECT模式 第十八章 薪水支付案例研究:第一次迭代开始 第十九章 薪水支付案例研究:实现 第Ⅳ部分 打包薪水支付系统 第二十章 包的设计原则 第二十一章 FACTORY模式 第二十二章 薪水支付案例研究...

    java设计模式之面向对象的思想(think in OO(Object Oriented))

    NULL 博文链接:https://stelin.iteye.com/blog/933147

    nihilist:Nigilist Ruby gem —应用程序中用户模型的空对象

    Nigilist 对于实现空对象模式非常有用。 它允许 null 对象为所有问题方法返回false ,为所有非 bang 方法返回nil为所有复数形式的方法(以及在 Ruby on Rails 中为同名 ActiveRecord 模型提供空关系)返回[] ,而...

    java常用设计模式及JDK与CGLIB实现动态代理区别(源码)

    java常用设计模式及JDK与CGLIB实现动态代理区别(源码) /** * 使用cglib动态代理 * @author * */ public class BookFacadeProxy implements MethodInterceptor{ private Object target; @Override public...

    敏捷软件开发:原则、模式与实践.pdf 高清

    第十七章 NULL OBJECT模式 第十八章 薪水支付案例研究:第一次迭代开始 第十九章 薪水支付案例研究:实现 第Ⅳ部分 打包薪水支付系统 第二十章 包的设计原则 第二十一章 FACTORY模式 第二十二章 薪水支付案例研究...

Global site tag (gtag.js) - Google Analytics