php设计模式之观察者模式_PHP教程
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php设计模式之观察者模式_PHP教程,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4354字,纯文字阅读大概需要7分钟。
内容图文
php设计模式之观察者模式
/** * Interface Observable * define a observable interface * @author jichao.wang */ interface Observable { function attach(Observer $observer); function detach(Observer $observer); function notify(); } /** * Class Login * @author jichao.wang */ class Login implements Observable { private $observers; public $status; public $ip; const LOGIN_ACCESS = 1; const LOGIN_WRONG_PASS = 2; const LOGIN_USER_UNKNOWN = 3; function __construct() { $this->observers = array(); } /** * @param Observer $observer * @author jichao.wang * attach a observer */ function attach(Observer $observer) { $this->observers[] = $observer; } /** * @param Observer $observer * @author jichao.wang * detach a observer */ function detach(Observer $observer) { $newObservers = array(); foreach ($this->observers as $key => $obs) { if ($obs !== $observer) { $newObservers[] = $obs; } } $this->observers = $newObservers; } /** * @author jichao.wang * handle observer notify */ function notify() { foreach ($this->observers as $obs) { $obs->update($this); } } /** * @author jichao.wang * 执行登陆 */ function handleLogin() { $ip = rand(1,100); switch (rand(1, 3)) { case 1: $this->setStatus(self::LOGIN_ACCESS, $ip); $ret = true; break; case 2: $this->setStatus(self::LOGIN_WRONG_PASS, $ip); $ret = false; break; case 3: $this->setStatus(self::LOGIN_USER_UNKNOWN, $ip); $ret = false; break; } /** * handle event */ $this->notify(); return $ret; } /** * @param $status * @author jichao.wang * set login status */ function setStatus($status,$ip) { $this->status = $status; $this->ip = $ip; } /** * @return mixed * @author jichao.wang * get login status */ function getStatus() { return $this->status; } } /** * Interface Observer * @author jichao.wang */ interface Observer { function update(Observable $observable); } /** * Class EmailObserver * @author jichao.wang */ class EmailObserver implements Observer { function update (Observable $observable) { $status = $observable->getStatus(); if($status == Login::LOGIN_ACCESS){ // $this->sendMail('用户ip:'.$observable->ip.'登陆成功!'); echo __CLASS__.'用户ip:'.$observable->ip.'登陆成功!'.'------------------'; } if($status == Login::LOGIN_WRONG_PASS){ // $this->sendMail('用户ip:'.$observable->ip.'登陆失败,密码错误!'); echo __CLASS__.'用户ip:'.$observable->ip.'登陆失败,密码错误!'.'------------------'; } if($status == Login::LOGIN_USER_UNKNOWN){ // $this->sendMail('用户ip:'.$observable->ip.'登陆失败,无此用户!'); echo __CLASS__.'用户ip:'.$observable->ip.'登陆失败,无此用户!'.'------------------'; } } } /** * Class PhoneObserver * @author jichao.wang */ class PhoneObserver implements Observer { function update (Observable $observable) { $status = $observable->getStatus(); if($status == Login::LOGIN_ACCESS){ // $this->sendMail('用户ip:'.$observable->ip.'登陆成功!'); echo __CLASS__.'用户ip:'.$observable->ip.'登陆成功!'.'------------------'; } if($status == Login::LOGIN_WRONG_PASS){ // $this->sendMail('用户ip:'.$observable->ip.'登陆失败,密码错误!'); echo __CLASS__.'用户ip:'.$observable->ip.'登陆失败,密码错误!'.'------------------'; } if($status == Login::LOGIN_USER_UNKNOWN){ // $this->sendMail('用户ip:'.$observable->ip.'登陆失败,无此用户!'); echo __CLASS__.'用户ip:'.$observable->ip.'登陆失败,无此用户!'.'------------------'; } } } class AbcObserver implements Observer { function update (Observable $observable) { $status = $observable->getStatus(); if($status == Login::LOGIN_ACCESS){ // $this->sendMail('用户ip:'.$observable->ip.'登陆成功!'); echo __CLASS__.'用户ip:'.$observable->ip.'登陆成功!'.'------------------'; } if($status == Login::LOGIN_WRONG_PASS){ // $this->sendMail('用户ip:'.$observable->ip.'登陆失败,密码错误!'); echo __CLASS__.'用户ip:'.$observable->ip.'登陆失败,密码错误!'.'------------------'; } if($status == Login::LOGIN_USER_UNKNOWN){ // $this->sendMail('用户ip:'.$observable->ip.'登陆失败,无此用户!'); echo __CLASS__.'用户ip:'.$observable->ip.'登陆失败,无此用户!'.'------------------'; } } } //实例化登陆信息 $login = new Login(); //实现发邮件观察者 $login->attach(new EmailObserver()); //实现发验证码观察者 $login->attach(new PhoneObserver()); //实现其他观察者 $login->attach(new AbcObserver()); //开始登陆 $login->handleLogin(); ?>
http://www.bkjia.com/PHPjc/931647.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/931647.htmlTechArticlephp设计模式之观察者模式 /** * Interface Observable * define a observable interface * @author jichao.wang */interface Observable{ function attach(Observer $observer); func...
内容总结
以上是互联网集市为您收集整理的php设计模式之观察者模式_PHP教程全部内容,希望文章能够帮你解决php设计模式之观察者模式_PHP教程所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。