空对象模式

Posted simple-clean-opt

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了空对象模式相关的知识,希望对你有一定的参考价值。

1、概述

在空对象模式中,“空”的语义主要划分为两种情况:数据上的“空”、操作上的“空”;针对者两种情况,空对象模式有不同的实现方式。

2、模式分析

空对象模式主要目的是消除掉代码中null。(1)当我们编写一个方法并有返回值时,如果必须要返回一个null,例如查询数据库中一个不存在的对象;在调用这个方法时必须对返回值进行非空检查,否者可能将抛出NullPointerException,这种情况属于数据上的“空”。(2)当在某个类中定义(引用型)成员变量且未初始化时,这个成员变量的值只能为null,一旦该成员变量调用自己的方法时。首先要进行非空检查,这种情况属于操作上的“空”。

 

针对第一种情况,我们通常定义一个Nullable接口,声明一个isNull方法,空对象和非空对象继承于同一个基类,并实现这个Nullable接口,非空对象中isNull方法返回true,而空对象中isNull方法返回false。这样在方法中如果要返回null,就返回一个空对象,调用该方法时只需对返回对象的isNull方法进行判断即可。Scala中的Option类似于该模式,它只有两个实例对象:Some、NOne,前者为非空对象。后者为空对象。

 

针对第二种情况,我们对于某接口编写一个空的实现类,没有任何操作。在声明该接口引用时,用一个空的实现类来初始化。如在命令模式中,针对Command接口,我们定义一个NullCommand实现类,不执行任何操作,在声明Command接口引用时,用NullCommand对象来初始化。

 

以上是关于空对象模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式空对象模式

php实现空对象模式

空对象模式

空对象模式

设计模式(32)-----行为型模式-----空对象设计模式

空对象模式