空对象模式:使用NullObject替代null值作为返回,避免额外的null检查和空指针异常
核心:返回NullObject而非null值
角色:
- IObject:负责定义public属性和方法,包括:isNull()接口
- ConcreteObject:真实对象
- NullObject:当创建对象为null时,返回该对象。 - NullObject的方法中不进行正常的业务处理,而是反馈自定义的空值信息
注解:@Nullable和@NotNull标签,用于标注参数是否可为空,告知程序员是否需要做空校验
general
// 空对象模式 - 对于同一个接口,具有两种实现(真实对象类 和 空对象类)
// 当返回值为null时,则返回空对象类,空对象类中的方法不做实际业务处理,而是反馈自定义的空值信息(避免空指针异常)
public class Test {
public static void main(String[] args) {
CarFactory carFactory = new CarFactory();
ICar car = carFactory.createCar((int)(Math.random() * 100 * 1024)); // return (money > 10 * 1024)? new CarA() : new NullCar();
car.run();
}
}
// 功能接口
public interface ICar {
boolean isNull();
void run();
}
// 真实对象类
public class CarA implements ICar{
@Override
public boolean isNull() { return false;}
@Override
public void run() {
System.out.println("正常业务逻辑 - The car is runing");
}
}
// 空对象类
public class NullCar implements ICar{
@Override
public boolean isNull() { return true;}
@Override
public void run() {
System.out.println("空对象信息提示 - Not have a car, can't run!");
}
}