2022-01-07 09:00:01 +00:00
|
|
|
|
# 空对象(Null)
|
2019-11-02 22:11:39 +08:00
|
|
|
|
|
2022-01-07 09:00:01 +00:00
|
|
|
|
## Intent
|
2019-11-02 22:11:39 +08:00
|
|
|
|
|
|
|
|
|
使用什么都不做
|
|
|
|
|
|
|
|
|
|
的空对象来代替 NULL。
|
|
|
|
|
|
|
|
|
|
一个方法返回 NULL,意味着方法的调用端需要去检查返回值是否是 NULL,这么做会导致非常多的冗余的检查代码。并且如果某一个调用端忘记了做这个检查返回值,而直接使用返回的对象,那么就有可能抛出空指针异常。
|
|
|
|
|
|
2022-01-07 09:00:01 +00:00
|
|
|
|
## Class Diagram
|
2019-11-02 22:11:39 +08:00
|
|
|
|
|
2022-01-07 09:00:01 +00:00
|
|
|
|
\
|
2019-11-02 22:11:39 +08:00
|
|
|
|
|
2022-01-07 09:00:01 +00:00
|
|
|
|
|
|
|
|
|
## Implementation
|
2019-11-02 22:11:39 +08:00
|
|
|
|
|
|
|
|
|
```java
|
|
|
|
|
public abstract class AbstractOperation {
|
|
|
|
|
abstract void request();
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
```java
|
|
|
|
|
public class RealOperation extends AbstractOperation {
|
|
|
|
|
@Override
|
|
|
|
|
void request() {
|
|
|
|
|
System.out.println("do something");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
```java
|
|
|
|
|
public class NullOperation extends AbstractOperation{
|
|
|
|
|
@Override
|
|
|
|
|
void request() {
|
|
|
|
|
// do nothing
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
```java
|
|
|
|
|
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();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|