| EAA 模式目录 |

特殊情况

一个子类,为特定情况提供特殊行为。

有关完整描述,请参阅 EAA 模式496

空值在面向对象程序中很尴尬,因为它们破坏了多态性。通常,您可以自由地在给定类型的变量引用上调用 foo,而无需担心该项是确切类型还是子类。使用强类型语言,您甚至可以使编译器检查调用是否正确。但是,由于变量可以包含空值,因此您可能会在空值上调用消息时遇到运行时错误,这将为您提供一个友好且友好的堆栈跟踪。

如果变量可能为空,您必须记住用空值测试代码将其包围,以便在存在空值时执行正确操作。通常,正确操作在许多上下文中是相同的,因此您最终会在许多地方编写类似的代码 - 犯下代码重复的罪过。

空值是此类问题的常见示例,其他问题会定期出现。在数字系统中,您必须处理无穷大,它对加法等事物有特殊规则,这些规则打破了实数的通常不变性。我在商业软件中的最早经历之一是与一个未完全知晓的公用事业客户打交道,被称为“居住者”。所有这些都意味着改变类型的通常行为。

不要返回空值或一些奇怪的值,而是返回一个具有调用者期望的相同接口的特殊情况。