## 定义
      一个空对象取代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. 部分实例不需要做任何处理。
