引入Null对象(Introduce Null Object)
你需要再三检查某对象是否为null;将null值替换为null对象
一、动机
1、多态最根本的好处在于:你不必在向对象询问“你是什么类型”而后根据得到的答案调用对象的某个行为--你只管调用就是了,其它的一切多态机制会为你安排妥当
2、null对象一定是常量,可以使用Singleton来实现它们
3、关于Null对象模式,你可以在Woolf[Woolf]中找到更详细的介绍
二、做法
1、为源类建立一个子类,使其行为就像是源类的null版本。在源类和null子类中都加上isNull()函数
2、编译
3、找出所有“索取源对象却获得一个null”的地方。修改这些地方,使他们改而获得一个空对象
4、找出所有“将源对象和null作比较”的地方。修改这些地方,使他们调用isNull()函数
5、编译,测试
6、找出这样的程序点:如果对象不是null,做A动作,否则做B动作
7、对于每一个上述地点,在null类中覆写A动作,使其行为和B动作相同
8、使用上述被覆写的动作,然后删除掉“对象是否等于null”的条件测试
9、编译并测试