设计模式拓展 之 空对象模式

空对象模式:使用NullObject替代null值作为返回,避免额外的null检查和空指针异常
核心:返回NullObject而非null值
角色:

  • IObject:负责定义public属性和方法,包括:isNull()接口
  • ConcreteObject:真实对象
  • NullObject:当创建对象为null时,返回该对象。 - NullObject的方法中不进行正常的业务处理,而是反馈自定义的空值信息
    注解:@Nullable和@NotNull标签,用于标注参数是否可为空,告知程序员是否需要做空校验
    设计模式 - NullObject模式

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!");
    }
}
posted @ 2021-01-02 20:41  祁奇  阅读(70)  评论(0编辑  收藏  举报