非空校验一直是一个麻烦的问题,此模式可以稍微缓解

例:

//定义动物接口
public interface Animal {public void makeSound();
}//定义一个小狗
class Dog implements Animal {public void makeSound() {System.out.println(“Wang Wang Wang !”);}
}

public class Person {//听到动物叫声public void hear(Animal animal) {if (animal != null) {animal.makeSound();}}
}

增加一个NullAnimal

class NullAnimal implements Animal {public void makeSound() {}
}

这样在Person类中就不需要“animal!=null”这句话了,疑问我们提供了一个实现接口的所有方法,不会再产生null对象。

animal对象可能由MVC框架映射产生,我们只要定义一个默认的映射对象是NullAnimal,就可以解决空值判断的问题,提升代码的可读性

《设计模式之禅》--空对象模式相关推荐

  1. 设计模式のNullObjectPattern(空对象模式)----行为模式

    一.产生背景 在空对象模式(Null Object Pattern)中,一个空对象取代 NULL 对象实例的检查.Null 对象不是检查空值,而是反应一个不做任何动作的关系.这样的 Null 对象也可 ...

  2. php7 空对象,PHP设计模式之空对象模式(Null Object)代码实例大全(26)

    目的 空对象模式不属于 GoF 设计模式,但是它作为一种经常出现的套路足以被视为设计模式.它具有如下优点: 客户端代码简单 可以减少报空指针异常的几率 测试用例不需要考虑太多条件 返回一个对象或 nu ...

  3. 设计模式笔记二十二:空对象模式

    原文:http://www.runoob.com/design-pattern/ 少许个人理解,如有错误请指出.欢迎一起讨论. 在空对象模式(Null Object Pattern)中,一个空对象取代 ...

  4. Java进阶篇设计模式之十三 ---- 观察者模式和空对象模式

    前言 在上一篇中我们学习了行为型模式的备忘录模式(Memento Pattern)和状态模式(Memento Pattern).本篇则来学习下行为型模式的最后两个模式,观察者模式(Observer P ...

  5. Java进阶篇设计模式之十三——观察者模式和空对象模式

    简介 观察者模式又叫发布-订阅(Publish/Subscribe)模式.模型-视图(Model/View)模式.源-监听器(Source/Listener)模式或从属者(Dependents)模式. ...

  6. java观察者模式异步notify_Java进阶篇设计模式之十三 ---- 观察者模式和空对象模式...

    前言 在上一篇中我们学习了行为型模式的备忘录模式(Memento Pattern)和状态模式(Memento Pattern).本篇则来学习下行为型模式的最后两个模式,观察者模式(Observer P ...

  7. 设计模式之空对象模式

    空对象模式 空对象模式是通过实现一个默认的无意义对象来避免null值出现, 简单地说,就是为了避免在程序中出现null值判断而诞生的一种常用设计方法. 举个简单的例子, 一个听动物叫声的模拟程序: 动 ...

  8. 被遗忘的设计模式——空对象模式(转载)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qiumengchen12/articl ...

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

    一.Pattern name Provide an object as a surrogate for the lack of an object of a given type. The Null ...

  10. 设计模式之禅【代理模式】

    真刀实枪之代理模式 我是游戏至尊 "最近几年王者荣耀的热度飙升,自己打时可以体验到其中的升级乐趣,但是时间过得很快啊!自己不想打,找代练,好主意!" 作为一名程序员,先将打游戏这段 ...

最新文章

  1. NHibernate从入门到精通系列(7)——多对一关联映射
  2. 怎样理解js数组中indexOf()的用法与lastIndexOf
  3. 通过Github Teams进行代码仓库的权限访问控制
  4. 欧拉回路 欧拉路径
  5. String转换为int类型
  6. 【数学建模】通过调整飞行角度使飞机顺利飞行(Matlab)
  7. 移植gettimeofday
  8. 新版 世界地图 中文版地图 国界地图 高清全彩矢量地图 CDR 2021年整理制作
  9. 微信公众号群发模板消息占用每月4次群发次数吗
  10. 技嘉x79up4支持服务器内存吗,技嘉X79-UP4主板硬件规格解析
  11. 江飞 福州大学数学与计算机科学学院,强极值原理、第二边值问题解的唯一性.ppt...
  12. 《太极张三丰》原声音乐 320/mp3打包下载
  13. 20145236 《Java程序设计》第4周学习总结
  14. 新入手Seagate希捷1TB移动硬盘1t USB3.0一个
  15. DS二叉树——Huffman编码与解码(不含代码框架)
  16. iOS 根据银行卡号判断银行名称
  17. Docker入门学习教程
  18. 普吉岛自由行——泰囧准备篇
  19. Apache Dubbo(概念篇)
  20. Ubuntu服务器设置简体中文

热门文章

  1. 怎么退出python命令行cd找到txt文档_《python怎么读取txt文件》
  2. python 如何修改字典的key值_Python编程:如何把元组/字典作为参数传递给函数(附代码)...
  3. 单页面二改套后台,后台采用的是迅睿CMS框架
  4. Argon-Theme 一个非常好看的轻盈,简洁,美观的 WordPress 主题
  5. C# 使用Task执行异步操作
  6. 初窥JQuery(一)-选择符 【转】
  7. Node.js: 深入浅出Nodejs读书笔记
  8. wordpress二次开发技巧-functions.php篇
  9. 把Apache里面的网站和MySQL数据库移动到home盘
  10. centos7 安装 JDK环境