使用“Empty 模式”改进 Null Object】的更多相关文章

概述 Null Object 是Martin 大师提出的一种重构手段,其思想就是通过多态(派生一个Null对象)来减少逻辑(if … then …else)的判断. 而.NET中已经有Null Object 的使用原型了——“类型.Empty”. //1) String.Empty //2) return Enumerable.Empty<ModelValidationResult>(); //3) return GetRouteDataValue<IEnumerable<Rout…
设计模式:空对象模式(Null Object Pattern) 背景 群里聊到<ASP.NET设计模式>,这本书里有一个“Null Object Pattern”,大家就闲聊了一下这个模式,在此记录一下大概的结论. 典型结构 模式的结构非常简单,这里就不多说了,类图如下: 为什么使用这个模式?还需要null吗? 之所以需要这个模式是因为这个模式可以消除重复.想象一下,假如有多个消费端,每个消费端都要判断一下是否为空,而且对于为空的场景要做特殊的处理,这样就会导致很多重复.一些例子是:日志对象和…
GoF(四人帮)那本<设计模式 可复用面向对象软件的基础>可谓是设计模式方面的经典之作,其中介绍的23种设计模式, 也可谓是经典中的经典.但是,设计模式的种类绝不仅仅是这23种,除此之外还有很多巧妙可爱的设计模式值得我们学习.这些 被遗忘的设计模式,也可以堪称经典之作.今天我们来一起学习被遗忘的设计模式——空对象模式(Null Object Pattern). 一起看看这个模式会带给我们怎样的惊喜? 一.Pattern name Provide an object as a surrogate…
1      模式简介 在空对象模式中,一个空对象取代NULL对象的实例的检查.NULL对象不是检查空值,而是反映一个不做任何动作的关系.这样的NULL对象也可以在数据不可用的时候提供默认的行为. 在空对象模式中,我们创建一个指定各种要执行的操作的抽象类和扩展该类的实体类,还创建一个未对该类做任何实现的空对象类,该空对象类将无缝地使用在需要检查空值的地方. 空对象模式一般和策略模式或工厂模式结合使用. 2      案例 在这个例子中,我们使用工厂,根据姓名初始化用户,如果姓名在要求范围内,则生…
空对象模式:用一个空对象来取代null实例的检查,空对象实现一个不做任何动作的关系.(消除如if(Object == null) 这样的检查null实例代码) 例子: public abstract class Duck { public String name; public abstract void getName(); } public class ConcreteDuck extends Duck { public ConcreteDuck(String name) { this.na…
索引 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):Null Object 的示例实现. 意图 通过对缺失对象的封装,以提供默认无任何行为的对象替代品. Encapsulate the absence of an object by providing a substitutable alternative that offers suitable default do nothing behavior. In short, a design where "nothing w…
转自:http://www.cnblogs.com/haodawang/articles/5962531.html 有时候我们的代码中为避免 NullPointerException 会出现很多的对Null的判断语句,而这些语句一旦多起来,我们的代码就会变的惨不忍睹,因此我们引入了空对象模式(null object pattern)以此来使我们的代码变的更优雅一点. 下面来看一下空对象模式的大概视图 为了方便我这里就直接用手写的了,大家谅解一下:) ,凑合着看吧 假如我们需要查询某个学生的信息,…
通过引用Null Object,用于取消业务逻辑中对对象的为空推断 类图: Nullable: package com.demo.user; public interface Nullable { boolean isNull(); } Group: package com.demo.user; public class Group implements Nullable{ private int groupId; private String groupName; public int get…
今天继续总结<重构>这本书中的一个重构手法,Introduce Null Object.写这个手法是因为它确实很巧妙,在实际编程中经常会遇到这种情况,前人总结出来了这么一个经典的手法,当然还有由此手法扩展更普遍更经典的手法--Special Case. 刚入行的时候,听“老人”给我讲,书是要越读越薄的.当时没什么感受,觉得“老人”在故弄玄虚.工作4年多来,发现看过不少书,烂熟于心的却是最初入门的那一本--郭天祥C51.买的是一本影印盗版书(在大学里嘛,那年大二),不停的翻,书都翻烂了.现在那本…
前言 简单整理一下string.empty 和 "" 还有 null的区别. 正文 首先null 和 string.empty 还有 "" 是不一样的. null 关键字是表示不引用任何对象的空引用的文字值. null 是引用类型变量的默认值. 我们编辑高级语言的时候就可以表示的含义就是不引用任何对象的空引用. 但也不能完全这样说,应该说在语法含义上是这样的,具体的肯定指向某个引用. string.empty 和 "" 实际上是一样的. // T…