NULL OBJECT模式
2009-01-05 20:46
134 查看
Employee e = DB.GetEmployee(“Bob”);
If(e != null && e.IsTimeToday(today))
e.Pay();
上述代码的用法很常见,我们从数据库中查找名为Bob的员工,如果该对象不存在,返回null,如果存在,判断是它的发薪日,就调用Pay方法。&&操作可以保证仅当第一个表达式为真时才执行第二个表达式。然而有些时候我们总会忘记对null的检查而导致程序出错。有什么方法可以避免这些判断语句呢?这里可以提供一种解决方案,即NULL OBJECT模式。NULL OBJECT模式提供了当对象为空时的行为,但是它什么也没有做。灵活的使用NULL OBJECT模式可以简化我们的代码。
对于如何理解和应用NULL OBJECT模式,以一个简单的例子来说明一下。
If(e != null && e.IsTimeToday(today))
e.Pay();
上述代码的用法很常见,我们从数据库中查找名为Bob的员工,如果该对象不存在,返回null,如果存在,判断是它的发薪日,就调用Pay方法。&&操作可以保证仅当第一个表达式为真时才执行第二个表达式。然而有些时候我们总会忘记对null的检查而导致程序出错。有什么方法可以避免这些判断语句呢?这里可以提供一种解决方案,即NULL OBJECT模式。NULL OBJECT模式提供了当对象为空时的行为,但是它什么也没有做。灵活的使用NULL OBJECT模式可以简化我们的代码。
对于如何理解和应用NULL OBJECT模式,以一个简单的例子来说明一下。
public abstract class Stream : MarshalByRefObject, IDisposable { public abstract bool CanRead { get; } public abstract bool CanSeek { get; } public abstract bool CanWrite { get; } public abstract long Length { get; } public abstract long Position { get; set; } public abstract void Flush(); public abstract int Read([In, Out] byte[] buffer, int offset, int count); public virtual int ReadByte(); public abstract long Seek(long offset, SeekOrigin origin); public abstract void SetLength(long value); [HostProtection(SecurityAction.LinkDemand, Synchronization=true)] public static Stream Synchronized(Stream stream); public abstract void Write(byte[] buffer, int offset, int count); public virtual void WriteByte(byte value); public static readonly Stream Null; private sealed class NullStream : Stream { internal NullStream(); public override void Flush(); public override int Read([In, Out] byte[] buffer, int offset, int count); public override int ReadByte(); public override long Seek(long offset, SeekOrigin origin); public override void SetLength(long length); public override void Write(byte[] buffer, int offset, int count); public override void WriteByte(byte value); // Properties public override bool CanRead { get; } public override bool CanSeek { get; } public override bool CanWrite { get; } public override long Length { get; } public override long Position { get; set; } } }
相关文章推荐
- Null Object 模式之我见
- [翻译]空对象设计模式(Null Object Design Pattern)
- 开发趣事(2)--从NULL Object模式谈起
- 设计模式外传——NULL OBJECT模式
- 【设计模式】--NULL OBJECT 模式
- NULL OBJECT 模式
- 设计模式之美:Null Object(空对象)
- 使用Null Object设计模式
- 【设计模式攻略】行为型模式之Null Object模式
- GoF著作中未提到的设计模式(3):Null Object
- GoF著作中未提到的设计模式(3):Null Object
- 【设计模式 - 21】之空对象模式(Null Object)
- 设计模式笔记之 - NULL OBJECT
- 使用Null Object设计模式
- 空对象模式(Null Object Pattern)
- GoF著作中未提到的设计模式之三:Null Object
- 被遗忘的设计模式——空对象模式(Null Object Pattern)
- Null Object 模式和实现
- Null Object设计模式
- 使用Null Object设计模式[转]