当前位置:  开发笔记 > 编程语言 > 正文

Null对象模式是否占用内存

如何解决《Null对象模式是否占用内存》经验,为你挑选了1个好方法。

我一直在读,null对象模式将帮助您避免空检查和空指针异常,使您的代码更清晰.

我从未使用它,我发现它很有趣."null"不会占用内存,但如果我开始用"默认"对象创建替换我的空检查,这个程序会长期对内存产生负面影响吗?

例如:

空对象模式

public void DoSomething()
{
  User user = this.GetUser(id);
  string strDisplayName = user.DisplayName;
}

public User GetUser(int id)
{
   User user = this.LoadUserFromDB(id);
   if(user ==  null)
      return User.CreateNull();
   return user;
}

因此,一旦我离开方法的范围,GC将在以后收集该对象.但是如果我在走出范围之前经过一个循环怎么办?

public void DoSomething()
{
  users = this.GetAllUsers();
  foreach(User user in users)
  {
     string strAddress = user.Address.StreetName;
     //continue tasks
  }
}

同时在其他课堂上

public Class User
{
   public Address Address
   {
      get
      {
         if(this.Address == null)
            this.Address = Address.CreateNull();
         return this.Address;
      }
   }
}

public class Address
{
   private string streetName;

   public virtual string StreetName
   {
      get { return this.streetName; }
      set { this.streetName = value; }
   }

   public static CreateNull()
   {
      return new NullAddress();
   }
}

public class NullAddress : Address
{
   public override string StreetName
   {
      get { retun String.Empty; }
   }
}

空检查

User user = this.GetUser(id);
string strDisplayName = String.Empty;
if(user != null)
{
   strDisplayName = user.DisplayName;
}

只需检查用户是否为空,因此请指定属性值.我不会创建一个"null"对象

提前致谢.



1> Jon Skeet..:

通常,空对象不是按需创建的 - 而是共享它们.它们通常是一些其他抽象的不可变实现(使用无操作方法或任何适合的方法) - 因此它们可以非常容易地共享.

在这一点上,你已经有了一个单一的按你感兴趣的,在整个应用生命周期的过程中null对象类型的对象-这是几乎可以肯定微不足道.

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有