前面介绍了我们自己写的观察者模板,其实在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);

}

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐