當一個對象狀態發生改變後,會影響到其他幾個對象的改變,這時候可以用觀察者模式。像wordpress這樣的應用程序中,它容外部開發組開發插件,比如用戶授權的博客統計插件、積分插件,這時候可以應用觀察者模式,先註冊這些插件,當用戶發佈一篇博文後,就回自動通知相應的插件更新。
觀察者模式符合接口隔離原則,實現了對象之間的鬆散耦合。
觀察者模式UML圖:
//主題接口 接口Subject { public function register(Observer $ observer ); public function notify(); } // 觀察者接口 interface Observer { public function watch(); } //主題 class Action implements Subject { public $ _observers = array (); 公共功能寄存器(Observer $ observer ){ $ this - > _observers [] = $ observer ; } //實現藉口 public function notify(){ foreach ($ this - > _observers as $ observer ){ $ observer - > watch(); } } } //觀察者 類貓實現觀察員{ 公共功能的手錶(){ 回聲“貓看電視<HR />” ; } } class Dog implements Observer { public function watch(){ echo “Dog Watches TV <hr />” ; } } 類的人實現了Observer { public function 觀看(){ 回聲“人們看電視<hr />” ; } } //應用實例 $ action = new Action(); $ action - > register(new Cat()); $ action - > register(new People()); $ action - > register(new Dog()); $ action - > notify();
感興趣的可以嘗試一下