首页 > 代码库 > php观察者模式。
php观察者模式。
第一次写博客,大家多多关照!欢迎拍砖哦!
我也刚学设计模式,所以记录下来。
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | <?php class person{ public $name ; public $birthday ; public function __set( $name , $value ){ if (isset( $this -> $name )) $this -> $name = $value ; } public function __get( $name ){ if (isset( $this -> $name )) return $this -> $name ; } } //观察者类实现SplSubject接口,SplSubject是php内置接口 class PersonSubject implements SplSubject{ public $observers , $person ; public function __construct(person $person ){ $this ->observers = new SplObjectStorage(); $this ->person= $person ; } //增加一个观察者 public function attach(SplObserver $observers ){ $this ->observers->attach( $observers ); } //删除一个观察者 public function detach(SplObserver $observers ){ $this ->observers->detach( $observers ); } //达到条件时,通知观察者 public function notify(){ foreach ( $this ->observers as $observer ){ $observer ->update( $this ); } } //返回被观察者实例,供观察者处理 public function getPerson(){ return $this ->person; } } //观察者实现SplObserver接口,SplObserver是php内置接口 class fatherObserver implements SplObserver{ //条件达到时,执行的动作 public function update(SplSubject $splsubject ){ $person = $splsubject ->getPerson(); echo $person ->name. ‘ 生日快乐,我是爸爸!‘ ; } } class motherObserver implements SplObserver{ public function update(SplSubject $splsubject ){ $person = $splsubject ->getPerson(); echo $person ->name. ‘ 生日快乐,我是妈妈!‘ ; } } class sisterObserver implements SplObserver{ public function update(SplSubject $splsubject ){ $person = $splsubject ->getPerson(); echo $person ->name. ‘ 生日快乐,我是姐姐!‘ ; } } //实例化小明 $xiaoming = new person(); $xiaoming ->name= ‘小明‘ ; $xiaoming ->birthday= ‘0512‘ ; //绑定观察者 $subject = new PersonSubject( $xiaoming ); $subject ->attach( new fatherObserver); $subject ->attach( new motherObserver); $subject ->attach( new sisterObserver); //如果小明生日到了,通知观察者 $date = date ( ‘md‘ ,time()); if ( $xiaoming ->birthday== $date ){ $subject ->notify(); } ?> |
输出
大家自己看吧,项目中我也没用到观察者模式,郁闷!
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。