空对象模式(Null Object Pattern)。

定义

空对象模式是通过实现一个默认的无意义对象来避免null值出现,简单的说,就是为了避免在程序中出现null值判断而诞生的一种常用设计方法。

示例

举个简单的例子来说明,我们写一个听动物叫声的模拟程序,如下所示。

public interface Animal {
	/**
	 * 动物叫声
	 */
	void makeSound();
}
public class Dog implements Animal {

	@Override
	public void makeSound() {
		System.out.println("Wang Wang Wang");
	}

}

然后再定义一个人来听动物的叫声,如下所示。

public class Person {
	/**
	 * 听到动物的叫声
	 * 
	 * @param animal
	 */
	public void hear(Animal animal) {
		if (animal != null) {
			animal.makeSound();
		}
	}
}

在一个完整的系统中,animal对象是如何产生?什么原因会产生null值?如果我们能够控制null值的产生,是不是就可以去掉这个控制判断了?那这样,程序是不是更yi7读更简单?好,我们就编写一个更完美的程序,增加一个NullAnimal类,如下所示。

public class NullAnimal implements Animal {

	@Override
	public void makeSound() {
		
	}

}

增加了NullAnimal类后,在Person类中就不需要“animal != null”这句话了,因为我们提供了一个实现接口的所有方法,不会再产生null对象。想象一个Web项目中,animal对象可能由MVC框架映射产生,我们只要定义一个默认的映射对象是NullAnimal,就可以解决空值判断的问题,提升代码的可读性。这就是空对象模式(一些项目组把他作为编码规范的一部分),非常简单,但非常实用。

最佳实践

空对象模式是通过空代码实现一个接口或抽象类的所有方法,以满足开发需求,简化程序。他如此简单,以至于我们经常在代码中看到和使用,对他已经熟视无睹了,而他无论是事前规划或事后重构,都不会对我们的代码产生太大冲击,这也是我们“藐视”他的根本原因。

猜你喜欢

转载自blog.csdn.net/en_joker/article/details/83011524