php设计模式之观察者模式
来源:互联网 发布:淘宝用户冻结无法登陆 编辑:程序博客网 时间:2024/04/30 06:15
原理:
这一模式允许某个类观察另一个类的状态,当被观察的类状态发生改变的时候,观察类可以收到通知并且做出相应的动作,通常情况下,一个观察者类负责观察被观察者中的一个事件
使用场景:
用户注册(验证邮件,用户信息激活),购物网站下单时邮件/短信通知等.
接口:
SplSubject 接口,它代表着被观察的对象,
其结构:
interface SplSubject
{
public function attach(SplObserver $observer);
public function detach(SplObserver $observer);
public function notify();
}
SplObserver 接口,它代表着充当观察者的对象,
其结构:
interface SplObserver
{
public function update(SplSubject $subject);
}
<?php class User implements SplSubject { var $uername=''; var $userid; var $useremail; const REGISTER=1;//注册 const RECHARGE=2;//用户充值 /*此处的作用是 *注册观察者,此数组存放观察者,不同的事件根据type去调用不同的观察者 */ public $observers = array(); //添加观察者 public function attach(SplObserver $observer, $type) { $this->observers[$type] = $observer; } //注销观察者 public function detach(SplObserver $observer, $type) { if(array_search($observer, $this->observers[$type])) { unset($this->observers[$type]); } } /*此处的作用是 *负责发送消息给观察者 */ public function notify($type) { if(!empty($this->observers[$type])) { foreach($this->observers[$type] as $observer) { $observer->update($this); } } } public function addUser($username='',$userid='',$useremail='') { //执行sql $this->username=$username; //数据库插入成功 $res = true; //调用通知观察者 $this->notify(self::REGISTER); return $res; } public function charge() { //执行sql //数据库更新成功 $res = true; //调用通知观察者 $this->notify(self::RECHARGE); return $res; } } class SendMail implements SplObserver { public function update(SplSubject $subject) { echo $subject->username; // $content="欢迎您注册".$username; // $this->sendMail($content); } public function sendMail($email, $title, $content) { //调用邮件接口,发送邮件 } } $mail=new SendMail(); $user=new User(); $user->attach($mail,1); $user->addUser("mtg",1); $user->notify();
0 0
- Php设计模式之观察者模式
- PHP 设计模式之观察者模式
- PHP 设计模式之观察者模式
- php设计模式之观察者模式
- php中的设计模式之--观察者模式
- PHP 设计模式之观察者模式
- php设计模式之观察者模式
- php设计模式之观察者模式
- PHP 设计模式之观察者模式
- PHP 设计模式之观察者模式
- php设计模式之观察者模式
- php设计模式之观察者模式
- PHP 设计模式之观察者模式
- PHP 设计模式之观察者模式
- php八大设计模式之观察者模式
- php 设计模式之观察者模式
- php设计模式之观察者模式
- PHP设计模式之观察者模式
- 关于sizeof 2
- less之css3动画大方溢彩
- Linux进程间通信——信号集函数
- 【软工视频总结】概况
- Android中Context详解 ---- 你所不知道的Context
- php设计模式之观察者模式
- Unknown entity异常:org.hibernate.MappingException: Unknown entity:User findById
- 拍照、拍照裁剪
- 《人工智能教程(张仰森)》(三)
- HDU 5321 Beautiful Set
- iOS学习——Object-C模拟类变量
- HTTP协议定义的缓存机制
- Spring mvc注解说明
- socket阻塞与非阻塞,同步与异步、I/O模型