`
marcofly
  • 浏览: 8557 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Null object模式

阅读更多
Null Object模式的目的包括:

1. 当对象提供者无法提供指定类型的对象时, 返回一个什么都不做的对象, 这对调用者是透明的,并且调用者不用判断获得的对象是否为null了,当然,对象提供者必须告知调用者(通过约定等).

2. 有时候需要传递一个什么都不做的某个类型的对象给合作方. 例如某个函数需要实现特定接口的对象(通过参数传入)进行某些操作, 该函数的调用者在某些情况下希望不进行这些操作,那么他就可以传进来一个实现了该接口但函数体全为空的对象,这个对象就是Null Object.

原本需要判断null时:
EventRecorder recorder = EventRecorderFactory.getRecorderByType(0);
if( recorder ==null ){
Log.error("Recorder对象为空");
lastErrorCode =0;
}
else{
recorder.record("记录点啥...");
}

用了Null Object后:
publicinterface EventRecorder{
publicvoid record(String event);
}
publicclass RecordEventToDatabase implements EventRecorder{
publicvoid record(String event);
// 记录内容到数据库中
}
}

publicclass RecordEventToFile implements EventRecorder{
publicvoid record(String event);
// 记录内容到文件中
}
}
publicclass NullEventRecorder implements EventRecorder{
publicvoid record(String event);
}
publicstatic EventRecorder getRecorderByType(int type){
EventRecorder recorder =null;
if(type ==0)
recorder =new RecordEventToDatabase();
elseif(type ==1)
recorder =new RecordEventToFile();
else
recorder =new NullEventRecorder(); // 这就是Null Object
return recorder;
}


摘自http://www.cnblogs.com/west-link/archive/2011/07/08/2100691.html
分享到:
评论

相关推荐

    NullObject模式研究 (2013年)

    在许多面向对象的程序设计...NullObject模式能够用来解决这一问题。本文阐述了NullObject模式及其实现方式,针对空目标的单一实例化策略,给出了改进措施。NullObject模式对去除重复检测和减少空引用异常有较明显的效果。

    C#对象为Null模式(Null Object Pattern)实例教程

    **C#对象为Null模式(Null Object Pattern)** 在软件开发中,经常遇到的一个问题是对象可能为null。这种情况下,如果我们尝试调用该null对象的方法或属性,就会引发`NullReferenceException`异常。为了解决这个问题...

    如何在Java中优雅地判空详解

    首先,我们需要了解什么是NullObject模式。NullObject模式是一种设计模式,用于解决判空问题。在面向对象语言中,对对象的调用前需要使用判空检查,来判断这些对象是否为空,因为在空引用上无法调用所需方法。空对象...

    重构36计.docx

    NULL Object模式提供一个“空”对象,替代null值,简化代码中的null检查。 ### 函数命名有语法 遵循一致的命名规范,使函数名能反映其功能,提高代码可读性。 ### 去除只是内部状态不同的派生类 如果派生类只有...

    使用并行扩展附加功能中的管道

    4. **NullObject模式的应用**:当某个处理阶段无法执行时,可以使用NullObject模式的类作为替代,保证Pipeline的连续性,不会因为某个环节的缺失而导致整个处理流程中断。 5. **SQL Server集成**:在数据处理中,...

    c#编码规范

    9. **NullObject模式**: 避免频繁的null检查,通过提供默认或空对象,简化逻辑处理。 #### 重构工具 为了高效地进行重构,可以借助以下工具: 1. **SourceMonitor**: 定期监控代码质量,设定并保存质量检查点。 2...

    Effective_CSharp

    15. **利用“nameof”配合“NullObject”模式**:当检查对象是否为null时,使用`nameof`来获取属性名,结合NullObject模式提供更优雅的错误处理。 16. **利用“nameof”在异常消息中传递更多信息**:在抛出异常时,...

    用Java实现23种设计模式

    空对象模式(Null Object Pattern) 策略模式(Strategy Pattern) 模板模式(Template Pattern) 访问者模式(Visitor Pattern) 4. J2EE 模式 MVC 模式(MVC Pattern) 业务代表模式(Business Delegate ...

    null移动端崩溃问题

    2. **默认值或空对象模式**:提供一个默认值或“占位符”对象,以便在实际值为null时使用。在Kotlin中,可以使用Elvis操作符 `object?.method() ?: defaultMethod()`,如果object为null,则执行defaultMethod。 3. ...

    23种java版设计模式源码案例.zip

    23种java版设计模式源码案例.zip 0.目录 创建型模式(creational) 简单工厂(simplefactory) 动态工厂(dynamic) ...空对象模式(null object) 策略模式(strategy) 模板模式(template) 访问者模式(visitor)

    二十三种设计模式【PDF版】

    主要是介绍各种格式流行的软件设计模式,对于程序员的进一步提升起推进作用,有时间可以随便翻翻~~ 23种设计模式汇集 如果你还不了解设计模式是什么的话? 那就先看设计模式引言 ! 学习 GoF 设计模式的重要性 ...

    Unity3D教程:用ScriptableObject打包数据2

    BuildPipeline.BuildAssetBundle(Selection.objects, null, savaPath, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows); } } ``` 这段代码首先获取当前选中的CSV文件对象,然后将每个CSV文件的...

    33种JAVA设计模式DEMO

    空对象模式(Null Object Pattern) 策略模式(Strategy Pattern) 模板模式(Template Pattern) 访问者模式(Visitor Pattern) 4 J2EE 模式 这些设计模式特别关注表示层。这些模式是由 Sun Java Center 鉴定的。 ...

    java常用设计模式-空对象模式

    空对象模式(Null Object Pattern)是一种行为设计模式,它允许我们在不返回 null 的情况下提供默认行为。这种模式通常用于需要处理 null 对象的情况下,以避免NullPointerException 异常。 在软件设计中,我们经常...

    举例讲解Python中的Null模式与桥接模式编程

    Null模式 我想每个人都有一种经历,为了获取某属性,但是有时候属性是None,那么需要你做异常处理, 而假如你想节省这样的条件过滤的代码,可以使用Null模式以减少对象是否为None的判断 python的例子 我举个不是很...

    C语言设计模式 PDF《C Design Pattern》

    ### C语言设计模式知识点概述 #### 一、C语言与设计模式 在计算机科学领域,设计模式是指在软件设计过程中解决常见问题的一套被广泛接受的解决方案。虽然设计模式最初是在面向对象编程语言中被广泛应用的,但也...

    Java常用的3中设计模式代码即工厂模式、单例模式、观察者模式demo

    public void update(Observable o, Object arg) { // 更新显示的数据 } } ``` 以上是关于工厂模式、单例模式和观察者模式的基本介绍和Java实现。这些设计模式在实际编程中有着广泛的应用,能帮助我们编写出更...

Global site tag (gtag.js) - Google Analytics