Całościowy kod

interface Observer{
    public function update(Observable $observer);
}

abstract class  Observable {
    private $observers = array();

    public function attach(Observer $observer) {
      $this->observers[] = $observer;
    }
    public function detach(Observer $observer) {

      foreach($this->observers as $okey => $oval) {
        if ($oval == $observer) { 
          unset($this->observers[$okey]);
        }
      }
    }
    public function notify() {
      foreach($this->observers as $obs)
        $obs->update($this);
    }
}

class SmsNotification implements Observer{
    public function __construct() {
    }
    public function update(Observable $observable) {
      $this->sendSms($observable->getNews());   
    }
    private function sendSms($news)
    {
      echo "wysylam sms z nowa wiadomoscia $news<br>";   
    }
}

class EmailNotification implements Observer{
    public function __construct() {
    }
    public function update(Observable $observable) {
      $this->sendEmail($observable->getNews());   
    }
    private function sendEmail($news)
    {
      echo "wysylam email z nowa wiadomoscia $news<br>";   
    }
}

class NewsModel implements Observer{
    public function __construct() {
    }
    public function update(Observable $observable) {
      $this->addToDb($observable->getNews());   
    }
    private function addToDb($news)
    {
       echo 'dodaje newsy do bazy danych<br>';   
    }
}

class NewsDownloader extends Observable {

    private $news;
    function __construct() {
    }

    function updateNews($news) {
      $this->news = $news;
      $this->notify();
    }
    function getNews() {
      return $this->news;
    }
}

  $newsDownloader    = new NewsDownloader();
  $smsNotification   = new SmsNotification();
  $emailNotification = new EmailNotification();
  $dbModel           = new NewsModel();
  $newsDownloader->attach($dbModel);
  $newsDownloader->attach($emailNotification);
  $newsDownloader->attach($smsNotification); 
  $newsDownloader->updateNews('Zamknieto baze w USA');
  $newsDownloader->updateNews('Polska jest mocarstwem');
  $newsDownloader->detach($smsNotification);
  $newsDownloader->updateNews('Reprezentacja Polski w pilce noznej wygrywa Mistrzostwa Swiata');

Strony: 1 2 3