<?php
require_once 'Counter.php';
require_once 'CountListener.php';

use \Main\ObserverPattern\Counter;
use \Main\ObserverPattern\CountListener;

$counter = new Counter(5);
$observer = new CountListener(2);

$counter->Attach(new CountListener(1));
$counter->Attach($observer);
$counter->Attach(new CountListener(3));
$counter->Increment();
$counter->Increment();
$counter->Increment();
$counter->Increment();
$counter->Increment();
$counter->Increment(); // Notify
$counter->Increment(); // Notify
$counter->Decrement();
$counter->Decrement();
$counter->Decrement();
$counter->Detach($observer);
$counter->Increment();
$counter->Increment(); // Notify

/*
 * Alternative: Using the Standard PHP Library (SPL)
 */

require_once 'CounterUsingSpl.php';;
require_once 'CountListenerUsingSpl.php';

use \Main\ObserverPattern\CounterUsingSpl;
use \Main\ObserverPattern\CountListenerUsingSpl;

$counter = new CounterUsingSpl(5);

$counter->Attach(new CountListenerUsingSpl(1));
$counter->Attach(new CountListenerUsingSpl(2));
$counter->Increment();
$counter->Increment();
$counter->Increment();
$counter->Increment();
$counter->Increment();
$counter->Increment(); // Notify

?>