Last active
March 29, 2018 13:51
-
-
Save rilwanfit/cb842534c1d739fd5959ab71e530daf4 to your computer and use it in GitHub Desktop.
[Design Pattern] (Observer) - Newspaper and Reader
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$newspaper = new Newspaper('Newyork Times'); | |
$allen = new Reader('Allen'); | |
$jim = new Reader('Jim'); | |
$linda = new Reader('Linda'); | |
//add reader | |
$newspaper->attach($allen); | |
$newspaper->attach($jim); | |
$newspaper->attach($linda); | |
//remove reader | |
//$newspaper->detach($linda); | |
//set break outs | |
$newspaper->breakOutNews('USA break down!'); | |
//=====output====== | |
//Allen is reading breakout news USA break down! (Newyork Times) | |
//Jim is reading breakout news USA break down! (Newyork Times) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Newspaper implements SplSubject | |
{ | |
private $name; | |
private $observers = []; | |
private $content; | |
public function __construct($name) | |
{ | |
$this->name = $name; | |
} | |
public function attach(SplObserver $observer) | |
{ | |
$this->observers[] = $observer; | |
} | |
public function detach(SplObserver $observer) | |
{ | |
$key = array_search($observer, $this->observers, true); | |
if ($key) { | |
unset($this->observers[$key]); | |
} | |
} | |
public function notify() | |
{ | |
foreach ($this->observers as $value) { | |
$value->update($this); | |
} | |
} | |
public function breakOutNews($content) | |
{ | |
$this->content = $content; | |
$this->notify(); | |
} | |
public function getContent() | |
{ | |
return $this->content . " ({$this->name})"; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Reader implements SplObserver | |
{ | |
private $name; | |
public function __construct($name) | |
{ | |
$this->name = $name; | |
} | |
public function update(SplSubject $subject) | |
{ | |
echo $this->name . ' is reading breakout news <b>' . $subject->getContent() . '</b>' . PHP_EOL; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment