空对象模式 - Null Object Pattern
定义
一个空对象取代NULL对象实例的检查。NULL对象可以在数据不可用的时候提供默认的行为,属于行为型设计模式。
结构中包含的角色
- Resource 抽象资源
- ConcreteResource 具体资源
- NullResource 空资源
- 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);
优点
- 减少空指针异常风险。
- 对空对象情况的定制化的控制。
- 定义isNull()显得更加优雅,更加易懂。
缺点
- 会增加类的数量。
何时使用
- 需要用空对象来代替Null或undefined。
- 对象实例不存在的代码逻辑抽象出来。
- 部分实例不需要做任何处理。