`
sinokaka
  • 浏览: 324361 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Null Object 模式

    博客分类:
  • java
 
阅读更多
写代码的时候,遇到了好多Null的判断,突然想到了Null Object的模式,用了之后,确实发现少掉了好多的Null判断
下面是写完的类
private class SubfacDBTreeModel extends BDVoFcTreeModel {
       
        public SubfacDBTreeModel(TreeNode root,Vector vos) {
         super(root,vos);
        }
       
       public String getChildCode(int i) {
           
            SubfacVO facVO = getSubFac(i);
            return facVO.getPrimaryKey();
        }
       
       
        public String getFatherCode(int i) {
           
            SubfacVO facVO=getSubFac(i);
             
         String pk_father = facVO.getParentsubfac();
         
         if(pk_father!=null && pk_father.trim().length()==0) {
          pk_father=null;
         }
         return  pk_father;
        }
               
        
        public String getNodeCode(int i) {
           
            SubfacVO facVO=getSubFac(i);
 
            return facVO.getCsubfaccode();
        }
       
       
        public String getNodeName(int i) {
            SubfacVO facVO=getSubFac(i);
           
            return facVO.getCsubfacname();
        }
       
       
        private SubfacVO getSubFac(int i) {
            if (m_vecVOs == null || m_vecVOs.size() <= 0
                     || i >= m_vecVOs.size() ) {
                return new NullSubfacVO();
            }
           
            return (SubfacVO) m_vecVOs.elementAt(i);
        }
       
       
        /**
         * Null 模式,减少判断
         */
        private class NullSubfacVO extends SubfacVO {
           
            public String getPrimaryKey() {
                return null;
            }
           
            public String getParentsubfac() {
                return null;
            }
           
            public String getCsubfaccode() {
                return null;
            }
           
           
            public String getCsubfacname() {
                return null;
            }
        }
    }
 
如果不用null Object的话,要在getNodeName,getNodeCode,getChildCode,getFatherCode中加上
if (facVO == null ) {
  return null;
}
的判断语句。

现在有个问题是我如果不新建一个Null Object的子类,而是用SubfacVO 类的默认行为来代替,是不是一样可行,因为这几个Get方法,本身如果没有调用过set的话,他一定会返回一个null的。
 
转过来一想,觉得如果用SubfacVO 的默认行为的话,是不是会造成很多迷惑,后来看代码的人感觉很蹊跷,虽然刷了一点小聪明,少写了好多。但是如果遇上式样变更,后期维护什么的,可能就会造成一些不必要的麻烦。看来某些聪明还是不要乱用的好:)
 
 
分享到:
评论
1 楼 mayday85 2008-11-20  
不错 学习了

相关推荐

    NullObject模式研究 (2013年)

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

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

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

    敏捷软件开发:原则、模式与实践

    第17章 NULL OBJECT模式 第18章 薪水支付案例研究:第一次迭代开始 第19章 薪水支付案例研究:实现 第四部分 打包薪水支付系统 第20章 包的设计原则 第21章 FACTORY模式 第22章 薪水支付案例研究(第2部分) 第五...

    敏捷软件开发原则、模式与实践 C#版

    第21章 COMMAND模式和ACTIVE OBJECT模式:多功能与多任务 第22章 TEMPLATE METHOD模式和STRATEGY模式:继承和委托 第23章 FACADE模式和MEDIATOR模式 第24章 SINGLETON模式和MONOSTATE模式 第25章 NULL OBJECT模式 ...

    敏捷软件开发:原则、模式与实践.pdf

    第十七章 NULL OBJECT模式 第十八章 薪水支付案例研究:第一次迭代开始 第十九章 薪水支付案例研究:实现 第Ⅳ部分 打包薪水支付系统 第二十章 包的设计原则 第二十一章 FACTORY模式 第二十二章 薪水支付案例研究...

    敏捷软件开发:原则、模式与实践.pdf

    第17章 NULL OBJECT模式 第18章 薪水支付案例研究:第一次迭代开始 第19章 薪水支付案例研究:实现 第四部分 打包薪水支付系统 第20章 包的设计原则 第21章 FACTORY模式 第22章 薪水支付案例研究(第2部分) 第五...

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

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

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

    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文件的...

Global site tag (gtag.js) - Google Analytics