空对象模式

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

举个简单的例子, 一个听动物叫声的模拟程序:

动物代码:

听叫声的人:

现在我们想, 能不能把 animal 的空值判断去掉呢?我们增加一个 NullAnimal 类:

增加了NullAnimal类后, 在Person类中就不需要"animal != null"这句话了, 因为我们提供了一个实现接口的所有方法, 不会再产生null对象. 想象一个web项目中, animal对象可能由MVC框架映射产生, 我们只要定义一个默认的映射对象是NullAnimal, 就可以解决控制判断的问题, 提升代码的可读性. 这就是空对象模式, 非常简单, 但非常实用.


空对象模式是通过空代码实现一个接口或抽象类的所有方法, 以满足开发需求, 简化程序.

它如此简单, 以至于我们经常在代码中看到或使用, 对它已经熟视无睹了, 而它无论是 事前规划或事后重构, 都不会对我们的代码产生太大的冲击.

设计模式之空对象模式相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. PHP设计模式--数据访问对象模式

    最简单的Web部件和最复杂的在线电子商务Web站点具有一个共同点:它们都要处理数据.大量的编程都设计数据的访问和操作.随着Internet的发展.脸颊存储设备应用数据的大量增长.对分析论的更深入理解以 ...

最新文章

  1. php页面刷新$_session会变化,每次刷新页面都会生产新的session_id
  2. java mapreduce编程_Hadoop实验——MapReduce编程(1)
  3. 关于Class.getResource和ClassLoader.getResource的路径问题
  4. 计算机组成原理 — 冯诺依曼体系结构
  5. Centos7常用操作
  6. python 线程死锁_python线程死锁与递归锁
  7. 炼丹侠必知的9大池化操作​汇总
  8. jsp的九大内置对象和四大作用域
  9. Qt Creator管理项目
  10. 新的学期、新的开始、新的付出、新的收获!
  11. java中随机数边界问题,java 简单Dice问题(随机数的运用)
  12. python 配置文件解析_python 解析配置文件
  13. oracle DataGuard停机和启动顺序
  14. 远播教育集团PHP面试题,远播教育金牌升学规划师陈煜雯:如何规划孩子的升学?【摇号】...
  15. flash 火狐总是崩溃_火狐浏览器Adobe Flash崩溃怎么办?最终解决方法
  16. .join()用法 | python学习
  17. VMware 笔试题目:猫和老鼠玩象棋
  18. VS2022安装EasyX 及 EasyX图形库安装和使用(附C++各图形编程项目示例源码)
  19. JAVA狗叫源代码_从头认识java-1.1 编程语言抽象过程以及java的基础特性
  20. 通讯录号码不见了怎么办?手机联系人不见了怎么恢复?

热门文章

  1. S3C2440 lds链接脚本解析
  2. 重构,体现一个工程师的基本素养和底蕴
  3. CocoaPods通过网络代理执行资源更新
  4. python并行计算_Python并行计算简单实现
  5. 台式电脑耳机插孔在哪_一图教你学会电脑主机后面各接口正确接线
  6. Nginx的开启和关闭
  7. table超出边框出现滚动条_精美横轴智能滚动条设计
  8. 盘点常用Java排序算法
  9. Java大牛的一些总结,献给对未来还在迷茫中的你!
  10. 2017计算机基本配置检测表,2017整理如何查看电脑的硬件配置信息?查看电脑硬件配.ppt...