php 设计模式之观察者模式

<?php



//观察者: 负责信息的变化。

interface IObserver{

 function onChanged($sender,$args);

}



//被观察者:加入到被观察者队列中,实现被观察

interface IObservable{

 function addObserver($observer);

}





// 实现被观察,

class UserList implements IObservable {



 //定义观察者集合

 private $_observers = array();

 

 //增加用户,调用观察者

 public function addCustomer($name){

 

   foreach ($this->_observers as $obs){

     

   $obs->onChanged($this,$name);

   $obs->sendMessage($this,$message);

  }

  //do something

 }

 

 // 执行观察者的方法

 public function sendMessage($message){

  

  foreach ($this->_observers as $obs)

  {

    $obs->sendMessage($this,$message);

  }

 }

 

 //在被观察者 引入观察者

 public function addObserver($observer){

  $this->_observers[] = $observer;

 }

}





//观察者:是要改变的信息

class UserListLogger implements IObserver

{

  public function onChanged( $sender, $args )

  {

   if($args ==='json'){

    echo 'JSON you are pig';

   }else{

     echo( "'$args' added to user list\n" );

   }

  }

  

  public function sendMessage($sender,$message){

   echo $message;

  }

  

}



class Userbing implements IObserver

{

    public function onChanged($sender,$message)

    {

        if(!empty($message))

        {

            echo "我将加入....你的组织!";

        }

    }

    

    public function sendMessage($sender,$mesg)

    {

        echo $mesg;

    }

}





$ul = new UserList();

$ul->addObserver( new UserListLogger() );

$ul->addCustomer( "json" );

$ul->sendMessage( "欢迎 JSON光临" );





$ul->addObserver( new userbing());

$ul->addCustomer("hubing");

$ul->sendMessage("hello");



?>

 

你可能感兴趣的:(观察者模式)