`
zhaoImpulse
  • 浏览: 80557 次
  • 性别: 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),这个对象的行为与真实对象相似,但不会引发错误或异常。当真实对象不存在时,空对象可以无缝地接替其职责,提供一种默认或无操作的行为。 在实现空对象模式...

    java常用设计模式-空对象模式

    空对象模式(Null Object Pattern)是一种行为设计模式,它允许我们在不返回 null 的情况下提供默认行为。这种模式通常用于需要处理 null 对象的情况下,以避免NullPointerException 异常。 在软件设计中,我们经常...

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

    **C#对象为Null模式(Null Object Pattern)** 在软件开发中,经常遇到的一个问题是对象可能为null。这种情况下,如果我们尝试调用该null对象的方法或属性,就会引发`NullReferenceException`异常。为了解决这个问题...

    空对象模式

    空对象模式(Null Object Pattern)是一种常用的软件设计模式,其主要目的是为了替代程序中可能出现的`null`引用,从而避免因为`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 ...

    用代理实现空对象模式

    空对象模式(Null Object Pattern)是一种行为设计模式,它的主要目的是在系统中处理"无对象"的情况,避免程序出现空指针异常或者条件判断语句,提高代码的可读性和可维护性。在这个主题中,我们将关注如何通过代理...

    NullObject模式研究 (2013年)

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

    33种JAVA设计模式DEMO

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

    C#面向对象设计模式纵横谈-1.Singleton 单件(创建型模式)

    在C#编程中,面向对象设计模式是一种组织代码和解决常见设计问题的模板。Singleton模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取这个唯一的实例。这种模式在需要控制资源的唯一...

    null移动端崩溃问题

    2. **默认值或空对象模式**:提供一个默认值或“占位符”对象,以便在实际值为null时使用。在Kotlin中,可以使用Elvis操作符 `object?.method() ?: defaultMethod()`,如果object为null,则执行defaultMethod。 3. ...

    二十三种设计模式【PDF版】

    同样地,面向对象设计员也沿袭一些模式,像“用对象表示状态”和“修饰对象以便 于你能容易地添加/删除属性”等。一旦懂得了模式,许多设计决策自然而然就产生了。 我们都知道设计经验的重要价值。你曾经多少次有过...

    深入PHP 面向对象 模式与实践(第3版).pdf

    面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它利用“对象”来设计软件。对象可以包含数据,以字段(通常称为属性或成员变量)的形式,以及代码,以方法(或函数)的形式。面向对象编程的...

    如何在Java中优雅地判空详解

    空对象模式的一种典型实现方式是:定义一个空对象接口,用于确定对象是否为空,并对原有对象的所有方法进行空实现。 在Java中,我们可以使用接口和工厂模式来实现NullObject模式。首先,我们定义一个空对象接口...

    设计模式.docx

    #### 空对象模式(Null Object Pattern) 空对象模式是用于解决 null 对象的问题。通过引入一个空对象来代替空引用,使得程序不会因为引用为空而抛出异常。 #### 策略模式(Strategy Pattern) 策略模式定义了一...

    nil:PHP 中一个非常棒且合理的空对象实现

    空对象模式是一种行为设计模式,它创建了一个表示“无”或“不存在”的对象,这个对象可以代替`null`值,避免程序中的条件检查和空指针异常。在面向对象设计中,空对象模式可以提高代码的可读性和可维护性。 2. **...

    Java对象池技术的原理及其实现

    对象池是一种软件设计模式,主要用于管理那些频繁创建与销毁且代价较高的对象。通过预先创建一定数量的对象,并将其保存在一个集合(通常称为池)中,当需要使用这些对象时,可以直接从池中获取已创建的对象,而不是...

    java.lang.IllegalArgumentException Cannot format given Object as a Date

    3. **空对象**:如果你尝试格式化一个`null`对象,也会引发此异常。确保在调用`format()`方法前,日期对象已正确初始化。 4. **线程安全问题**:`SimpleDateFormat`不是线程安全的,如果在多线程环境中未正确同步,...

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

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

Global site tag (gtag.js) - Google Analytics