目的

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

类图

空对象类图.png

实现

  1. public abstract class AbstractOperation {
  2. abstract void request();
  3. }
  4. public class RealOperation extends AbstractOperation {
  5. @Override
  6. void request() {
  7. System.out.println("do something");
  8. }
  9. }
  10. public class NullOperation extends AbstractOperation{
  11. @Override
  12. void request() {
  13. // do nothing
  14. }
  15. }
  16. public class Client {
  17. public static void main(String[] args) {
  18. AbstractOperation abstractOperation = func(-1);
  19. abstractOperation.request();
  20. }
  21. public static AbstractOperation func(int para) {
  22. if (para < 0) {
  23. return new NullOperation();
  24. }
  25. return new RealOperation();
  26. }
  27. }