Null Object 模式和实现
意图
提供一个对象[如一个代理]给给定的类型,用以代替这个对象为空的情况。 Null Object提供聪明的、什么也不做的行为,隐藏来自它的合作者的细节。
别名
Stub, Active Nothing
动机
有时,一个类需要它的一个合作者不需要做任何事。然而,类期望对待一个[什么也不做]的合作者与它对待实际上的对象提供的行为具有相同的方法。
举例来说,考虑一个显示球以移动有关荧屏的问题而且有特别的颜色效果。 这可以由创造一个球达成分类来显示球和使用一个Strategy pattern [GHJV95,第 315 页] 控制球的提议和另外的一个策略式样控制球的颜色来实现。然而, 和你开始想要产生是可能确定的最简单的策略每件事物正在工作。
…………………………………………………………
以上全文见 http://www.cnbug.com/Article/{82E30447-B3D9-4FE4-965B-5F5A4975D24A}.htm
在《敏捷软件开发--原则、模式、实践》 一书中看到了一个非常优雅的实现,不过是基于 Java 的, C# 中目前好像没有办法实现, 因为其中使用了匿名内部类




















其调用代码如下







这样写有一个无可比拟的好处,那就是 Employee.Null 对象天生就是 Singleton 的 , 任何一个 Employee实例只要执行 employee.equals( Employee.NULL )j就可以判断出是否为 NullObject
那么 在C# 如何实现呢?
无须使用 匿名内部类, 在 Martin Fowler 的《重构》一书中,提到了一个更通用的实现


































其中 IsNull 是 Nullable 接口的成员,在需要判断对象是否为NullObject时,只要执行 employee.IsNull 就可以了。
分类:
Design pattern
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述