PHP设计模式之观察者模式定义与用法示例
本文实例讲述了PHP设计模式之观察者模式定义与用法。分享给大家供大家参考,具体如下:
observers=array(); } /** *@paramObserver$observer *@authorjichao.wang *attachaobserver */ functionattach(Observer$observer) { $this->observers[]=$observer; } /** *@paramObserver$observer *@authorjichao.wang *detachaobserver */ functiondetach(Observer$observer) { $newObservers=array(); foreach($this->observersas$key=>$obs){ if($obs!==$observer){ $newObservers[]=$obs; } } $this->observers=$newObservers; } /** *@authorjichao.wang *handleobservernotify */ functionnotify() { foreach($this->observersas$obs){ $obs->update($this); } } /** *@authorjichao.wang *执行登陆 */ functionhandleLogin() { $ip=rand(1,100); switch(rand(1,3)){ case1: $this->setStatus(self::LOGIN_ACCESS,$ip); $ret=true; break; case2: $this->setStatus(self::LOGIN_WRONG_PASS,$ip); $ret=false; break; case3: $this->setStatus(self::LOGIN_USER_UNKNOWN,$ip); $ret=false; break; } /** *handleevent */ $this->notify(); return$ret; } /** *@param$status *@authorjichao.wang *setloginstatus */ functionsetStatus($status,$ip) { $this->status=$status; $this->ip=$ip; } /** *@returnmixed *@authorjichao.wang *getloginstatus */ functiongetStatus() { return$this->status; } } /** *InterfaceObserver *@authorjichao.wang */ interfaceObserver{ functionupdate(Observable$observable); } /** *ClassEmailObserver *@authorjichao.wang */ classEmailObserverimplementsObserver{ functionupdate(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.'登陆失败,无此用户!'.'------------------'; } } } /** *ClassPhoneObserver *@authorjichao.wang */ classPhoneObserverimplementsObserver{ functionupdate(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.'登陆失败,无此用户!'.'------------------'; } } } classAbcObserverimplementsObserver{ functionupdate(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=newLogin(); //实现发邮件观察者 $login->attach(newEmailObserver()); //实现发验证码观察者 $login->attach(newPhoneObserver()); //实现其他观察者 $login->attach(newAbcObserver()); //开始登陆 $login->handleLogin(); ?>
运行结果:
EmailObserver用户ip:41登陆失败,无此用户!------------------PhoneObserver用户ip:41登陆失败,无此用户!------------------AbcObserver用户ip:41登陆失败,无此用户!------------------
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。