前面介绍了我们自己写的观察者模板,其实在php标准库中SPL,有这样的观察者模板。
其中 SplSubject,SplObserver,SplStorage来源于标准库。
下面是登录的改造,没有写出全部代码,但是如果你认真读过前面一片文章,理解这个Spl的观察者模式不是问题,欢迎有问题讨论
class Login implements SplSubject{
private $storage;
function __construct(){
$this->storage = new SplObjectStorage();
}
function attach(SplObserver $observer)
{
$this->storage->attach($observer);
}
function detach(SplObserver $observer)
{
$this->storage->detach($observer);
}
function notify(){
foreach($this->storage as $obj)
{
$obj->update($this);
}
}
}
abstract class LoginObserver implements SplObserver{
private $login;
function __construct(Login $login)
{
$this->login=$login;
$login->attach($this);
}
function update(SplSubject $subject){
if($subject === $this->login)
{
$this->doUpdate($login);
}
}
abstract function doUpdate(Login $login);
}