Null Object 设计模式

原创 2004年05月26日 16:16:00

Null Object Pattern<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

意图

    提供一个对象[如一个代理]给给定的类型,用以代替这个对象为空的情况。 Null Object提供聪明的、什么也不做的行为,隐藏来自它的合作者的细节。

 

别名

 

      Stub, Active Nothing

 

 

动机

     

   有时,一个类需要它的一个合作者不需要做任何事。然而,类期望对待一个[什么也不做]的合作者与它对待实际上的对象提供的行为具有相同的方法。

举例来说,考虑一个显示球以移动有关荧屏的问题而且有特别的颜色效果。 这可以由创造一个球达成分类来显示球和使用一个Strategy pattern [GHJV95,第 315 页] 控制球的提议和另外的一个策略式样控制球的颜色来实现。然而, 和你开始想要产生是可能确定的最简单的策略每件事物正在工作。

 

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />

    

 

现在,最简单的策略不是策略。 那就是do nothing, ,不移动而且不改变颜色。 然而,Strategy pattern 需要球有实现strategy 的接口的对象。 这是Null Object 模式变成有用的地方。 只需要简单实现不移动球的NullMovementStrategy 和不改变球的颜色的NullColorStrategy 类。 这两个都可以实现本质上没有代码。 所有的方法在这些类中只做 "nothing" 。它们是Null Object 模式的完美例子。

Null Object 模式的关键是一个为这个类型的所有对象定义接口的抽象类。 Null Object 通过这个抽象类的子类来实现。因此它遵照抽象类的接口, 它可以在需要这个类的任何地方型来使用。当作比拟为使用不实际上实现抽象的接口特别的 "null"的值和一定不变地被检查为由于特别的代码在使用抽象的接口任何的对象中。

一般会认为 Null Objects 是过于简单和 "愚蠢" ,但是在事实上一个 Null Objects 在没有任何其他的对象互相影响的情况下,总是很确切的知道需要去做什么。 因此,事实上它是最"智能"的。

 

适用性

  

     在以下情况下使用Null Object模式

 

;        一个对象需要一个合作者  Null Object 将不被引入这个合作体系--它利用已经存在的合作者。

;        一些合作者的实例应该什么也不做。

 

 

 

 

 

 

 

参与者

  • Client

    • 需要一个合作者

  • AbstractObject

    • 声明Client合作者的接口

    • 适当的在所有类中实现接口默认行为

  • RealObject

    • 定义一个AbstractObject的子类,它的实例实现Client预期的有用的行为

    • 定义AbstractObject 的一个具体的子类提供客户预期的有用行为

  • NullObject

    • 提供一个与 AbstractObject 一致的接口,使得这个空对象可以替代真实的对象

    • 使接口中的方法 do nothing

    • 当不止一种方法“do nothing”时,就需要相同数量的空对象

C#中的obj==null问题?

C#中的obj==null问题最近看设计模式的案例部分,动手练了一个应用简单工厂模式的计算器案例,并且在原基础上上实现了连续运算。连续运算需要保存上一次运算的结果,每一次运算都需要一个新的运算类(+-...
  • wwlcsdn000
  • wwlcsdn000
  • 2017年11月30日 16:53
  • 118

被遗忘的设计模式——空对象模式(Null Object Pattern)

GoF(四人帮)那本《设计模式 可复用面向对象软件的基础》可谓是设计模式方面的经典之作,其中介绍的23种设计模式,也可谓是经典中的经典。但是,设计模式的种类绝不仅仅是这23种,除此之外还有很多巧妙可爱...
  • qiumengchen12
  • qiumengchen12
  • 2015年04月07日 17:20
  • 2410

Object Null 设计模式

  Object Null 设计模式:在频繁需要判断某个对象是否为空的时候,可以用。                                   使用Object Null 设计模式有利于管理...
  • lazy_p
  • lazy_p
  • 2010年07月13日 21:57
  • 483

使用Null Object设计模式

   在ESFramework的设计实现中,很多地方都用到了Null Object设计模式。Null Object模式的含义在于,提供一个对象给指定的类型,用以代替这个对象为空的情况。 Null...
  • zhuweisky
  • zhuweisky
  • 2007年02月28日 19:55
  • 547

Null Object设计模式

 我们知道,在编写Java或Groovy代码时,当我们得到一个对象的引用并调用其方法时,如果这个引用是null,JVM将会报一个NullPointerException异常。我们处理此类问题的通常办法...
  • gary_niu
  • gary_niu
  • 2007年11月05日 11:35
  • 986

【设计模式】--NULL OBJECT 模式

1 丑陋的代码:   Employee e = DB.getEmployee("Tom");   if(e!=null && e.isTimeToPay(today))//丑陋且容易出错    ...
  • qfzhangwei
  • qfzhangwei
  • 2017年11月05日 14:34
  • 82

[设计模式]null object模式

当要对一个对象进行多次判空的时候,可以使用null object模式 吧null替换成null对象 详见http://www.cnblogs.com/chenying99/archive/2012...
  • zhulingjun2011
  • zhulingjun2011
  • 2012年11月07日 09:12
  • 240

设计模式 - Null Object 模式

代码中到处都是处理null字段或变量的重复逻辑。 将null逻辑替换为一个Null Object, 提供一个正确的null行为对象。...
  • mrszsongzi
  • mrszsongzi
  • 2017年04月04日 22:29
  • 94

页面对象(page object)模式

页面对象模式简介使用页面对象的设计模式。页面对象模型将测试代码和被测试的页面的页面元素及其操作方法进行分离,以降低页面元素的变化对测试代码的影响。每一个被测试的页面都会被定义为一个类,类中会定位所有需...
  • darcy_wyl
  • darcy_wyl
  • 2018年01月11日 20:18
  • 62

设计模式:空对象模式(Null Object Pattern)

背景 群里聊到《ASP.NET设计模式》,这本书里有一个“Null Object Pattern”,大家就闲聊了一下这个模式,在此记录一下大概的结论。 典型结构 模式的结构非常简单,这里就不多说...
  • dyllove98
  • dyllove98
  • 2013年07月05日 23:19
  • 2332
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Null Object 设计模式
举报原因:
原因补充:

(最多只允许输入30个字)