티스토리 뷰
<?php
abstract class AbstractSubject
{
abstract function attach(&$observer_in);
abstract function detach($observer_in);
abstract function notify();
}
abstract class AbstractObserver
{
abstract function update($state);
}
class JSubject extends AbstractSubject
{
var $_observers = array();
var $_state = null;
function notify()
{
foreach ($this->_observers as $observer) {
$return[] = $observer->update($this->_state);
}
return $return;
}
function attach(&$observer)
{
if (is_object($observer)) {
$class = get_class($observer);
foreach ($this->_observers as $check) {
if (is_a($check, $class)) {
return;
}
}
$this->_observers[] = &$observer;
} else {
$this->_observers[] = &$observer;
}
}
function detach($observer)
{
$retval = false;
$key = array_search($observer, $this->_observers);
if ($key !== false) {
unset($this->_observers[$key]);
$retval = true;
}
return $retval;
}
function getState()
{
return $this->_state;
}
function setState($state)
{
$this->_state = $state;
$this->stateChanged();
}
function stateChanged()
{
$this->notify();
}
}
abstract class Nobserver extends AbstractObserver
{
public $_subject = null;
public $_state = false;
function __construct(& $subject)
{
$subject->attach($this);
$this->_subject = &$subject;
}
function update($state)
{
$this->_state = $state;
$this->display();
}
}
class ob1 extends Nobserver
{
function display()
{
echo " Observer 1 : " . $this->_state . "\n";
}
}
class ob2 extends Nobserver
{
function display()
{
echo " Observer 2 : " . $this->_state . "\n";
}
}
class ob3 extends Nobserver
{
function display()
{
echo " Observer 3 : " . $this->_state . "\n";
}
}
class ob4 extends Nobserver
{
function display()
{
echo " Observer 4 : " . $this->_state . "\n";
}
}
class ob5 extends Nobserver
{
function display()
{
echo " Observer 5 : " . $this->_state . "\n";
}
}
$subject = new JSubject();
$observer1 = new ob1($subject);
$observer2 = new ob2($subject);
$observer3 = new ob3($subject);
$observer4 = new ob4($subject);
$observer5 = new ob5($subject);
$subject->setState(444);
$subject->detach($observer2);
$subject->setState(111);
$subject->detach($observer5);
$subject->setState(666);
'웹개발 > Php' 카테고리의 다른 글
state 패턴 샘플 (0) | 2017.02.06 |
---|---|
데코레이터패턴 샘플 (0) | 2017.02.06 |
Apater 패턴 샘플 (0) | 2017.02.06 |
추상팩토리 패턴 샘플 소스 (0) | 2017.02.06 |
PHP COOK Book 책 정리하기 (0) | 2016.10.06 |