我一直在读,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"对象
提前致谢.
通常,空对象不是按需创建的 - 而是共享它们.它们通常是一些其他抽象的不可变实现(使用无操作方法或任何适合的方法) - 因此它们可以非常容易地共享.
在这一点上,你已经有了一个单一的按你感兴趣的,在整个应用生命周期的过程中null对象类型的对象-这是几乎可以肯定微不足道.