本文章属于专栏- 概述 - 《设计模式(极简c++版)》-优快云博客
本章简要说明空对象模式。本文分为模式说明、本质思想、实践建议、代码示例四个部分。
模式说明
- 方案: 空对象模式是一种设计模式,它通过创建一个空对象来代替 NULL 或者空值。当需要一个对象却没有合适的实例时,空对象模式可以提供一个不执行任何动作但仍然具备正确行为的对象。
- 优点:
- 减少条件判断: 可以避免在代码中频繁地检查空值。
- 简化代码逻辑: 通过提供一个默认的空对象,可以简化代码结构并降低代码复杂度。
- 缺点:
- 可能隐藏问题: 如果不小心使用了空对象,可能会掩盖实际存在的问题。
- 不适用于所有情况: 空对象模式适用于某些特定情况,但不是所有情况都适用。
本质思想:空对象模式的本质思想是在缺少有效对象时,提供一个默认的“空”对象,使得客户端代码无需特殊处理空值情况,从而简化代码逻辑。
实践建议:不建议使用,这里省去的代码检查空值以及简化的代码结构,很可能会在未来隐藏关键问题。极大地增加了运维成本
代码示例
#include <iostream>
#include <string>
// 基类 Bird
class Bird {
public:
virtual void fly() const = 0;
};
// 具体鸟类 Sparrow
class Sparrow : public Bird {
public:
void fly() const override {
std::cout << "Sparrow is flying" << std::endl;
}
};
// 空对象 NullBird
class NullBird : public Bird {
public:
void fly() const override {
// Do nothing
}
};
int main() {
Bird *bird1 = new Sparrow(); // 有实际鸟对象
Bird *bird2 = new NullBird(); // 无实际鸟对象,使用空对象
bird1->fly(); // 输出:Sparrow is flying
bird2->fly(); // 无输出
delete bird1;
delete bird2;
return 0;
}
/* 输出
Sparrow is flying
*/