一、定义
空对象模式(NullObjectPattern)是通过实现一个默认的无意义对象来避免 null 值出现。
简单地说,就是为了避免在程序中出现 null 值判断而诞生的一种常用设计方法。
二、实例
我们直接通过一个例子来看看空对象模式是怎么回事吧。
1. 模拟一个动物叫声的程序
// 定义动物接口
public interface Animal {
public void makeSound();
}
// 定义一个小狗
class Dog implements Animal {
public void makeSound() {
System.out.println("Wang Wang Wang!");
}
}
2. 定义一个人来听动物叫声
public class Person {
//听到动物叫声
public void hear(Animal animal) {
if(animal != null){
animal.makeSound();
}
}
}
3. 分析
输入参数 animal 是应该做空值判断这没有什么问题。但是,我们这样思考:在一个完整的系统中,animal 对象是如何产生?什么原因会产生 null 值?如果我们能够控制住 null 值的产生(在会产生 null 值的地方使用一个空对象替代),是不是就可以去掉这个空值判断了?这样,程序就可以不用进行频繁的空值判断了,代码也更清晰整洁。
4. 建立一个空对象
class NullAnimal implements Animal {
public void makeSound(){
}
}
在产生 animal 对象的位置,我们提供一个默认的空对象返回代替 null,就可以解决空值判断的问题了,提升代码的可读性。
三、总结
空对象模式是一个很简单实用的模式,它可以使代码更清晰和简洁,提升代码的可读性,但是我们也不要滥用它。一般,一个对象在很多地方都被使用到,都需要对其进行空值判断,代码因此产生很多空值判断的逻辑,我们就可以根据实际场景考虑使用空对象模式了。
查看更多:设计模式分类以及六大设计原则