设计模式:空对象模式(Null Object Pattern)
来源:互联网 发布:sql中group by的用法 编辑:程序博客网 时间:2024/05/16 16:41
背景
群里聊到《ASP.NET设计模式》,这本书里有一个“Null Object Pattern”,大家就闲聊了一下这个模式,在此记录一下大概的结论。
典型结构
模式的结构非常简单,这里就不多说了,类图如下:
为什么使用这个模式?还需要null吗?
之所以需要这个模式是因为这个模式可以消除重复。想象一下,假如有多个消费端,每个消费端都要判断一下是否为空,而且对于为空的场景要做特殊的处理,这样就会导致很多重复。一些例子是:日志对象和缓存对象。
这个模式带来的另外一个好处就是方便做测试,这些Null Object类似Stub Object。
引入这个模式的前提是:“所有消费端对于空对象的行为的期望是一致的”,如果消费端A和消费端B对于“空”的处理方式不一样,就需要两个Null Object。对于大多数对象,他们不清楚为“空”时消费端到底需要啥行为,因此null还是需要的,而且大多数场景还是需要null。
有些语言有nil对象,这种对象可以接受任何消息,这些消息不会出现异常,也没有返回结果,对于这种语言结构,编程时需要非常注意,很可能引入BUG,并不是说这种结构不好,我是非常喜欢的。
null object可以结合嵌套私有类,见下例:
1 /// <summary> 2 /// 返回后续处理器。 3 /// </summary> 4 public static IDeserializePostProcesser GetProcesser(Type resultType) 5 { 6 resultType.MustNotNull("resultType"); 7 8 if (_Processers.ContainsKey(resultType)) 9 {10 return _Processers[resultType];11 }12 13 return new EmptyDeserializePostProcesser();14 }15 16 private class EmptyDeserializePostProcesser : IDeserializePostProcesser17 {18 public object OnDeserialized(object result)19 {20 return result;21 }22 }
备注
社区和QQ是个好东西,这里有很多支持你的朋友,他们给你鼓励、意见和批评。谢谢兄弟们,加油!
<script type="text/javascript"><!--google_ad_client = "ca-pub-1944176156128447";/* cnblogs 首页横幅 */google_ad_slot = "5419468456";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
- 设计模式:空对象模式(Null Object Pattern)
- 【设计模式】空对象模式(Null Object Pattern)
- [翻译]空对象设计模式(Null Object Design Pattern)
- 空对象模式(Null Object Pattern)
- Java 空对象设计模式(Null Object Pattern) 讲解
- Java Null Object Pattern(空对象模式)
- 被遗忘的设计模式——空对象模式(Null Object Pattern)
- 被遗忘的设计模式——空对象模式(Null Object Pattern)
- Java设计模式——空对象模式(Null Object Pattern)
- 【设计模式 - 21】之空对象模式(Null Object)
- 设计模式学习—空对象模式(Null Object Design Pattern)
- 设计模式之空对象(Null Object)模式
- 【设计模式】传输对象模式(Transfer Object Pattern)
- Null Object 设计模式
- Null Object设计模式
- Object Null 设计模式
- [设计模式]null object模式
- 【设计模式】--NULL OBJECT 模式
- 与客户程序mysql交互的技巧
- .NET对象占内存多少
- 某年的腾讯笔试题——不使用除法运算产生新数组
- 录制终端操作并进行操作重现
- ORA-12571: TNS:packet writer failure
- 设计模式:空对象模式(Null Object Pattern)
- 更改Http请求中的内容
- 题目1003:A+B
- delphi实现图象灰度处理的3种方法
- [数据库基础]——编码标准之编码注意事项(持续更新)
- PHP+MySql环境配置
- Hibernate3.2(0) : Hibernate框架简介
- The 11th tip of DB Query Analyzer
- 已root手机在DDMS下无法读取data目录的解决办法