极简设计模式-空对象模式

PHP技术
364
0
0
2022-08-07

空对象模式 - 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. 部分实例不需要做任何处理。