php设计模式之观察者模式用法示例
内容摘要
这篇文章主要为大家详细介绍了php设计模式之观察者模式用法示例,具有一定的参考价值,可以用来参考一下。
感兴趣的小伙伴,下面一起跟随php教程的小玲来看看吧!观察者模式:定义对
感兴趣的小伙伴,下面一起跟随php教程的小玲来看看吧!观察者模式:定义对
文章正文
这篇文章主要为大家详细介绍了php设计模式之观察者模式用法示例,具有一定的参考价值,可以用来参考一下。
感兴趣的小伙伴,下面一起跟随php教程的小玲来看看吧!
观察者模式:定义对象间一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。观察者类:1.抽象主题角色:主题角色将所有对观察者对象的引用保存在一个集合中,每个主题可以任意多个观察者。抽象主题提供了增加和删除观察者对象的接口。2.抽象观察者角色:为所有的具体观察者定义一个接口,在观察的主题发生改变时更新自己3.具体主题角色:存储相关状态到具体观察者对象,当具体主题的内部状态发生改变时,给所有登记过的观察者发出通知。具体主题角色通常用一个具体子类实现。4.具体观察者角色:存储一个具体主题对象,存储相关状态,实现抽象观察者角色所要求的更新接口,以使得其自身状态和主题的状态保持一致作用:1. 观察者模式的耦合度较小2.支持广播通信代码如下:
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 | <code><?php /* php教程 www.512Pic.com */ //抽象主题 interface Subject{ public function attach( $observer ); public function detach( $observer ); public function notifyObservers(); } //具体主题 class ConcreateSubject implements Subject{ private $_observers ; public function __construct(){ $this ->_observers = array (); } public function attach( $observer ){ return array_push ( $this ->_observers, $observer ); } public function detach( $observer ){ $index = array_search ( $observer , $this ->_observers); if ( $index === false || ! array_key_exists ( $index , $this ->_observers)){ return false; } unset( $this ->_observer[ $index ]); return true; } public function notifyObservers(){ if (! is_array ( $this ->_observers)){ return false; } foreach ( $this ->_observers as $observer ){ $observer ->update(); } return true; } } //抽象观察者 interface Observer{ public function update(); } //具体观察者 class ConcreteObserver implement Observer{ private $_name ; public function __construct( $name ){ $this ->_name = $name ; } public function update(){ echo 'Observer' , $this ->_name. 'has notified<br/>' ; } } //客户端 class Client{ public static function main(){ $subject = new ConcreteSubject(); //新增第一个观察者 $observer1 = new ConcreteObserver( 'Martin' ); $subject ->attach( $observer1 ); //通知 $subject ->notifyObservers(); //新增第二个观察者 $observer2 = new ConcreteObserver( 'jaky' ); $subject ->attach( $observer2 ); //通知 $subject ->notifyObservers(); //删除观察者1 $subject ->deatch( $observer1 ); //通知 $subject ->notifyObservers(); } } Client::main(); ?> </code> |
注:关于php设计模式之观察者模式用法示例的内容就先介绍到这里,更多相关文章的可以留意
代码注释