forked from lcp0578/design-patterns-in-php
/
Observer.php
40 lines (37 loc) · 972 Bytes
/
Observer.php
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
<?php
/**
* Observer
*/
interface Observer {
function onChanged($sender, $args);
}
interface Observable {
function addObserver($observer);
}
class CustomerList implements Observable {
private $_observers = array();
public function addCustomer($name){
foreach ($this->_observers as $obs) {
$obs->onChanged($this, $name);
}
}
public function addObserver($observer) {
$this->_observers[] = $observer;
}
}
class CustomerListLogger implements Observer {
public function onChanged($sender, $args){
echo 'Logger:' . $args . ' Customer has been added to the list' . PHP_EOL;
}
}
class CustomerListUpdate implements Observer {
public function onChanged($sender, $args){
echo 'MySQL update: insert ' . $args .' into Customer table ' . PHP_EOL;
echo '--------------------' . PHP_EOL;
}
}
$cl = new CustomerList();
$cl->addObserver(new CustomerListLogger());
$cl->addObserver(new CustomerListUpdate());
$cl->addCustomer('Jack');
$cl->addCustomer('Lee');