空对象模式的主要目标是确保向客户端提供可用的对象。因此,我们希望替换以下代码...
void Class::SetPrivateMemberA() {
m_A = GetObject();
}
void Class::UseA() {
if (m_A != null) {
m_A.Method();
} else {
// assert or log the error
}
}
使用这种实现方式:
void Class::SetPrivateMemberA() {
m_A = GetObject();
}
void Class::UseA() {
m_A.Method();
}
我思考的问题是,GetObject()仍然返回一个对象,一个空对象或其他对象。我喜欢不重复检查null并相信返回的对象可用的想法,但为什么我不在第一次实现中就这样做呢?
空对象模式的优势只是稍微增加了对清理代码的信任吗?在第二个实现中,调用A.Method()之前不检查它是否为null仍然是一个好习惯吗?