1. 意图(Intent)

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

2. 类图(Class Diagram)

22870bbe-898f-4c17-a31a-d7c5ee5d1c10.png

3. 实现(Implementation)

抽象操作类 [ AbstractOperation ]

  1. public abstract class AbstractOperation {
  2. abstract void request();
  3. }

真实操作类 [ RealOperation ]

  1. public class RealOperation extends AbstractOperation {
  2. @Override
  3. void request() {
  4. System.out.println("do something");
  5. }
  6. }

无操作类 [ NullOperation ]

  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. }