空对象(Null)

Intent

使用什么都不做

的空对象来代替 NULL。

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

Class Diagram

设计模式 - 空对象 - 图1

Implementation

  1. public abstract class AbstractOperation {
  2. abstract void request();
  3. }
  1. public class RealOperation extends AbstractOperation {
  2. @Override
  3. void request() {
  4. System.out.println("do something");
  5. }
  6. }
  1. public class NullOperation extends AbstractOperation{
  2. @Override
  3. void request() {
  4. // do nothing
  5. }
  6. }
  1. public class Client {
  2. public static void main(String[] args) {
  3. AbstractOperation abstractOperation = func(-1);
  4. abstractOperation.request();
  5. }
  6. public static AbstractOperation func(int para) {
  7. if (para < 0) {
  8. return new NullOperation();
  9. }
  10. return new RealOperation();
  11. }
  12. }

设计模式 - 空对象 - 图2