空对象模式
空对象模式(Null Object Pattern)是通过实现一个默认无意义的对象来避免null值得出现,简单的说,就是为了避免在程序中出现null值判断而诞生的一种常用的设计方法。
空对象模式的例子
我们写一个听动物声音的模拟程序,代码如下:
定义动物接口
package cn.african.nullObjectPattern;
public interface Animal {
public void makeSound();
}
定义小狗
package cn.african.nullObjectPattern;
public class Dog implements Animal {
@Override
public void makeSound() {
System.out.println("汪汪汪");
}
}
然后在定义一个人来听动物的叫声。
听动物叫声的人
package cn.african.nullObjectPattern;
public class Person {
public void hear(Animal animal){
if(animal != null){
animal.makeSound();
}
}
}
可见,人在听动物声音的时候,都要对动物进行非空判断。
但是我们这样思考:在一个完整的系统中,animal对象是如何产生的?什么原因会产生null值?如果我们能够控制住这个null的产生,是不是就可以去掉这个if的非空判断了?
好,我们编写一个更完美的程序,增加一个NullAnimal类
增加一个NullAnimal
package cn.african.nullObjectPattern;
public class NullAnimal implements Animal {
@Override
public void makeSound() {}
}
增加了NullAnimal类后,在Person类中就不需要"animal != null"这句话了,到时候我们调Person中的hear方法传入的参数要么是Dog对象,要么是NullAnimal对象,就不需要在hear中进行空值判断了。
想象一个Web项目中,animal对象可能是由MVC框架映射产生,我们只要定义一个默认的映射对象是NullXXX,就可以解决空值判断问题。