CS-Notes全部笔记在阅读器中打开

空对象(Null)

意图

使用什么都不做的空对象来代替 null。

一个方法返回 null,意味着方法的调用端需要去检查返回值是否是 null,这么做会导致非常多的冗余的检查代码。并且如果某一个调用端忘记了检查返回值,而直接使用返回的对象,那么就有可能抛出空指针异常。

类图

类图的配图

实现

public abstract class AbstractOperation {
    abstract void request();
}
public class RealOperation extends AbstractOperation {
    @Override
    void request() {
        System.out.println("do something");
    }
}
public class NullOperation extends AbstractOperation{
    @Override
    void request() {
        // do nothing
    }
}
public class Client {
    public static void main(String[] args) {
        AbstractOperation abstractOperation = func(-1);
        abstractOperation.request();
    }

    public static AbstractOperation func(int para) {
        if (para < 0) {
            return new NullOperation();
        }
        return new RealOperation();
    }
}

Client 不用判断 func() 的返回值,直接调用 request(),参数为负数时什么也不发生。JDK 中的 Collections.emptyList() 返回空列表而不是 null,也是同样的思路。

参考资料

在阅读器中可以用目录和搜索、切换深色模式、练习这篇笔记中的面试题:打开《设计模式 - 空对象》