世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。
-
意图
使用空对象代替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;}@Overridepublic Boolean nonNull() {return true;}@Overridepublic String getName() {return name;}}static class NullValue extends AbstractValue {@Overridepublic String getName() {return "non name";}@Overridepublic 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
想看更多吗?请访问:设计模式