空对象模式 Null Object Pattern

未匹配的标注

定义

  一个空对象取代NULL对象实例的检查。NULL对象可以在数据不可用的时候提供默认的行为,属于行为型设计模式。

结构中包含的角色

  1. Resource 抽象资源
  2. ConcreteResource 具体资源
  3. NullResource 空资源
  4. ResourceFactory 资源工厂

最小可表达代码

  abstract class Resource {}
  class ConcreteResource extends Resource {}
  class NullResource extends Resource {}

  class ResourceFactory
  {
     public static function getResourceById($id) : Resource
     {
        if ($id > 0) {
              return new ConcreteResource();
        }

        return new NullResource();
     }
  }

  $resource = ResourceFactory::getResourceById(0);
  var_dump($resource);

优点

  1. 减少空指针异常风险。
  2. 对空对象情况的定制化的控制。
  3. 定义isNull()显得更加优雅,更加易懂。

缺点

  1. 会增加类的数量。

何时使用

  1. 需要用空对象来代替Null或undefined。
  2. 对象实例不存在的代码逻辑抽象出来。
  3. 部分实例不需要做任何处理。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
发起讨论 查看所有版本


暂无话题~