PHP设计模式之空对象模式

由于某种原因,经常会无法返回正常的实例化对象,就用一个 null 来代替,就是空对象。而此时,在客户端调用的时候必须使用 if 语句来判断是否是正常的对象。空对象模式就是为了消除这个 if 语句而使用的。

空对象演示第一版:使用 if 语句判断

demo1.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
header('Content-Type:text/html; charset=utf-8');

class User{
public function getInfo(){
return '信息';
}
}

class Factory{
static public function getUser(){
//$obj = new User(); // new User()是直接写的,如果复杂的逻辑可能不是直接写
$obj = null;
return $obj;
}
}

$user = Factory::getUser();
if(is_object($user)){
echo $user->getInfo();
}

空对象演示第二版:使用 null 对象来避免 if

demo2.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
header('Content-Type:text/html; charset=utf-8');

class User{
public function getInfo(){
return '信息';
}
}

class Factory{
static public function getUser(){
//$obj = new User(); // new User()是直接写的,如果复杂的逻辑可能不是直接写
$obj = null;
if(!$obj) $obj = new Null();
return $obj;
}
}

class Null extends User{
public function getInfo(){}
}

$user = Factory::getUser();
echo $user->getInfo();