nullobject:使用Null Object设计模式

        对于如何理解和应用该模式通过个例子就能很好进行介绍说明节我们在讨论消息分派器消息分派器使用了前述日志记录器并且通过属性来注入具体日志记录器对象

        private IEsfLogger esfLogger;
        
public IEsfLogger EsfLogger
        {
            

            {
                
this.esfLogger = value;
            }
        }    

    现在假设我们在消息分派器内部多个地方使用日志记录器来进行日志记录我们总要写这样语句:

      (this.esfLogger != null)
     {
          
this.esfLogger.Log//记录日志
     }

    也就是说在使用的前我们都要判断 下日志记录器引用是否为空如果不为空才可以其Log思路方法如果日志记录器进行日志记录地方很多那么每个地方都会充斥着这种判断其引用是否 为空代码有没有办法来避免这所有判断语句了有!那就是使用Null Object设计模式
    ESFramework为每种必要组件都提供了对应Null Object类型这些类型名字以“Empty”作为前缀比如IEsfLogger对应Null Object类型就是EmptyEsfLoggerEmptyEsfLogger实现Log思路方法什么也不用做:

        public void Log( errorType , msg,  location, ErrorLevel level)
        {
            
//Do Nothing !
        }

    有了EmptyEsfLogger我们就可以象这样来设计消息分派器日志记录器属性:

        private IEsfLogger esfLogger =  EmptyEsfLogger;
        
public IEsfLogger EsfLogger
        {
            

            {
                
 (value != null)
                {
                    
this.esfLogger = value ??  EmptyEsfLogger;
                }
            }
        }

   





="xspace-totlerecord">2="xspace-totlepages">1/2="xspace-current">12>
Tags:  null的使用 vb无效使用null 无效使用null nullobject

延伸阅读

最新评论

发表评论