`
- 浏览:
497196 次
- 性别:
- 来自:
北京
-
Null Object 模式用在下面两个场景里确实有作用:
1。一种是返回集合的时候。如果返回集合时返回null,我们就必须多做一步判断:
List<Person> persons = personCache.fetchAll();
if(persons!=null){
for(Person p:persons){
p.doSometing();
}
}
但如果返回的是一个空集合,我们就不需要判断是否为null了。
2。另一个场景是在策略模式(Strategy Pattern)或者状态模式(
State Pattern)中。这两种模式下,都是要根据一定的策略或者状态进行不同的操作,这种情况下设置一个默认的do nothing的Null Object很有用。
我们还是用Person的例子。比方每个Person都有个绝技,我们叫KillSkill。
public interface KillSkill{
public void kill(Person p);
}
//降龙十八掌
public XiangLong implements KillSkill{
public void kill(Person p){
// 丐帮帮主之绝学,阳刚无匹,血减50。
p.blood = p.blood - 50;
}
}
//独孤九剑
public DuGu implements KillSkill{
public void kill(Person p){
//剑魔独孤求败的绝学,风清扬传令狐冲 ,血减30。
p.blood = p.blood - 30;
}
}
//Null Object
public NullSkill implements KillSkill{
public void kill(Person p){
//do nothing
}
}
public class Person {
public int blood;
public KillSkill killSkill;
public Person(int blood,KillSkill killSkill){
this.blood = blood;
this.killSkill = killSkill;
}
}
public class PersonCache {
public static Person[] callHeros() {
//萧峰出场
Person qiaofeng = new Person(100, new XiangLong());
//令狐冲出场
Person linghuchong = new Person(100, new DuGu());
//该我出场了,我这样的平凡人没啥特殊的必杀技,就是伪装个侠客,混饭吃。
Person me = new Person(100, null);
return new Person[]{qiaofeng, linghuchong, me};
}
}
Person boss = PersonCache.callBoss();
//现在有人遇到危难了,boss出场了,要雇佣几个侠客给自己报仇。
Person heros = PersonCache.callHeros();
//英雄们轮番上阵
for(Person p:heros){
p.killSkill.kill(boss);
}
//结果出错了。这里面有个假侠客,me,killSkill是null.漏馅了,看来这行混不下去了。有没有别的办法?Null Object模式。
Person me = new Person(100,new NullSkill());
//我学了一招do nothing的招数,这下没有NullPointer错误了,不容易被识破了。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
在许多面向对象的程序设计...NullObject模式能够用来解决这一问题。本文阐述了NullObject模式及其实现方式,针对空目标的单一实例化策略,给出了改进措施。NullObject模式对去除重复检测和减少空引用异常有较明显的效果。
**C#对象为Null模式(Null Object Pattern)** 在软件开发中,经常遇到的一个问题是对象可能为null。这种情况下,如果我们尝试调用该null对象的方法或属性,就会引发`NullReferenceException`异常。为了解决这个问题...
第17章 NULL OBJECT模式 第18章 薪水支付案例研究:第一次迭代开始 第19章 薪水支付案例研究:实现 第四部分 打包薪水支付系统 第20章 包的设计原则 第21章 FACTORY模式 第22章 薪水支付案例研究(第2部分) 第五...
第21章 COMMAND模式和ACTIVE OBJECT模式:多功能与多任务 第22章 TEMPLATE METHOD模式和STRATEGY模式:继承和委托 第23章 FACADE模式和MEDIATOR模式 第24章 SINGLETON模式和MONOSTATE模式 第25章 NULL OBJECT模式 ...
第十七章 NULL OBJECT模式 第十八章 薪水支付案例研究:第一次迭代开始 第十九章 薪水支付案例研究:实现 第Ⅳ部分 打包薪水支付系统 第二十章 包的设计原则 第二十一章 FACTORY模式 第二十二章 薪水支付案例研究...
第17章 NULL OBJECT模式 第18章 薪水支付案例研究:第一次迭代开始 第19章 薪水支付案例研究:实现 第四部分 打包薪水支付系统 第20章 包的设计原则 第21章 FACTORY模式 第22章 薪水支付案例研究(第2部分) 第五...
首先,我们需要了解什么是NullObject模式。NullObject模式是一种设计模式,用于解决判空问题。在面向对象语言中,对对象的调用前需要使用判空检查,来判断这些对象是否为空,因为在空引用上无法调用所需方法。空对象...
NULL Object模式提供一个“空”对象,替代null值,简化代码中的null检查。 ### 函数命名有语法 遵循一致的命名规范,使函数名能反映其功能,提高代码可读性。 ### 去除只是内部状态不同的派生类 如果派生类只有...
4. **NullObject模式的应用**:当某个处理阶段无法执行时,可以使用NullObject模式的类作为替代,保证Pipeline的连续性,不会因为某个环节的缺失而导致整个处理流程中断。 5. **SQL Server集成**:在数据处理中,...
9. **NullObject模式**: 避免频繁的null检查,通过提供默认或空对象,简化逻辑处理。 #### 重构工具 为了高效地进行重构,可以借助以下工具: 1. **SourceMonitor**: 定期监控代码质量,设定并保存质量检查点。 2...
15. **利用“nameof”配合“NullObject”模式**:当检查对象是否为null时,使用`nameof`来获取属性名,结合NullObject模式提供更优雅的错误处理。 16. **利用“nameof”在异常消息中传递更多信息**:在抛出异常时,...
空对象模式(Null Object Pattern) 策略模式(Strategy Pattern) 模板模式(Template Pattern) 访问者模式(Visitor Pattern) 4. J2EE 模式 MVC 模式(MVC Pattern) 业务代表模式(Business Delegate ...
2. **默认值或空对象模式**:提供一个默认值或“占位符”对象,以便在实际值为null时使用。在Kotlin中,可以使用Elvis操作符 `object?.method() ?: defaultMethod()`,如果object为null,则执行defaultMethod。 3. ...
23种java版设计模式源码案例.zip 0.目录 创建型模式(creational) 简单工厂(simplefactory) 动态工厂(dynamic) ...空对象模式(null object) 策略模式(strategy) 模板模式(template) 访问者模式(visitor)
主要是介绍各种格式流行的软件设计模式,对于程序员的进一步提升起推进作用,有时间可以随便翻翻~~ 23种设计模式汇集 如果你还不了解设计模式是什么的话? 那就先看设计模式引言 ! 学习 GoF 设计模式的重要性 ...
BuildPipeline.BuildAssetBundle(Selection.objects, null, savaPath, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows); } } ``` 这段代码首先获取当前选中的CSV文件对象,然后将每个CSV文件的...