世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。
- 意图
使用空对象代替null - 类图
- 实例
interface Value {
/**
* 是否为空
* @return
*/
Boolean nonNull ();
/**
* 获取名字
* @return
*/
String getName();
}
static abstract class AbstractValue implements Value {
protected String name;
}
static class RealValue extends AbstractValue {
private String name;
public RealValue (String name) {
this.name = name;
}
@Override
public Boolean nonNull() {
return true;
}
@Override
public String getName() {
return name;
}
}
static class NullValue extends AbstractValue {
@Override
public String getName() {
return "non name";
}
@Override
public Boolean nonNull() {
return false;
}
}
static class ValueFactory {
private String existsName = "123";
public Value getValue (String name) {
if (existsName.equals(name)) {
return new RealValue(name);
}
return new NullValue();
}
}
- 测试
public static void main(String[] args) {
ValueFactory factory = new ValueFactory();
System.out.println(factory.getValue("123").getName());
System.out.println(factory.getValue("sss").getName());
}
运行结果:
123
non name