Snippets

Zsolt Bodnár Observer pattern

Created by Zsolt Bodnár
<?php

interface iSubject {
	public function Attach($observer);
	public function Detach($observer);
	public function Notify();
}

class ConcreteSubject implements iSubject {
	private $_subjectState = "";
	private $_observers = array();

	public function Attach($observer) {
		$this->_observers[] = $observer;
	}

	public function Detach($observer) {
		$eredmeny = array_search($observer, $_observers);
		if ($eredmeny !== false) {
			unset($_observers[$observer]);
		}
	}

	public function Notify() {
		foreach ($this->_observers as $obs) {
			$obs->Update($this);
		}
	}

	public function getSubjectState() {
		return $this->_subjectState;
	}

	public function setSubjectState($value) {
		$this->_subjectState = $value;
	}
}

interface iObserver {
	public function Update(ConcreteSubject $subject);
}

class ConcreteObserver implements iObserver {
	private $_name = "";
	private $_observerState = "";
	// private $_subject = NULL ; // ConcreteSubject

	
	function __construct($name) {
		$this->_name = $name;
	}

	public function Update(ConcreteSubject $subject) {
		// var_dump($subject);
		$this->_observerState = $subject->getSubjectState();
		echo "Az " . $this->_name . " megfigyelő új állapota " . $this->_observerState .  "." . PHP_EOL; 
	}
}

$s = new ConcreteSubject();

$s->Attach(new ConcreteObserver("A"));

$s->Attach(new ConcreteObserver("B"));

$s->setSubjectState("ABC");
$s->Notify();

$s->setSubjectState("QWE");
$s->Notify();

Comments (0)

HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.