Null Object模式
Null Object模式用于代替空指针(C++中),以避免上层模块对返回值做空值判定。Null Object模式返回的不是一个空指针,而是一个空对象,上层模块对返回值做操作时,不需要做空判定,而是按正常逻辑调用这个对象的某个接口,只不过对于空对象而言,这个接口什么事也没做,例如:
class animal {
public:
virtual void make_sound() = 0;
};
class dog : public animal {
void make_sound() { cout << "woof!" << endl; }
};
class null_animal : public animal {
void make_sound() { }www.zzzyk.com
};
在我看来这个模式在C++中其实挺扯淡的,因为去判断一个指针是否为NULL,远比创建一个空类,并且添加若干个空函数代价小更多。更何况,我们还不知道null_animal的生命周期如何管理。
但是在我以往写的代码中,我也写过一些避免空指针判定的代码,例如我会使用引用。注意,引用肯定不能保证所对应的对象是合法的,这就像无法确定一个指针是不是野指针一样:
const Item &Container::FindItem(int id) const {
static Item null_item;
Table::const_iterator it = m_items.find(id);
return it == m_items.end() ? null_item : it->second;
}
补充:综合编程 , 其他综合 ,