Concept Flow - Observer pattern
Subject state changes
Notify all observers
Each observer updates
Observers react to change
End
The subject changes state, then notifies all observers, which then update themselves accordingly.
<?php class Subject { private $observers = []; private $state; public function attach($observer) { $this->observers[] = $observer; } public function setState($state) { $this->state = $state; $this->notify(); } public function notify() { foreach ($this->observers as $obs) { $obs->update($this->state); } } } class Observer { public function update($state) { echo "Observer notified with state: $state\n"; } } $subject = new Subject(); $observer1 = new Observer(); $observer2 = new Observer(); $subject->attach($observer1); $subject->attach($observer2); $subject->setState('ON'); ?>
| Step | Action | Subject State | Observers Notified | Output |
|---|---|---|---|---|
| 1 | Create Subject | null | none | |
| 2 | Create Observer1 | null | none | |
| 3 | Create Observer2 | null | none | |
| 4 | Attach Observer1 | null | none | |
| 5 | Attach Observer2 | null | none | |
| 6 | Set Subject state to 'ON' | ON | Observer1, Observer2 | Observer notified with state: ON Observer notified with state: ON |
| 7 | Notify observers | ON | Observer1, Observer2 | |
| 8 | Observer1 update called | ON | Observer1 | Observer notified with state: ON |
| 9 | Observer2 update called | ON | Observer2 | Observer notified with state: ON |
| 10 | End | ON | all notified | Notifications complete |
| Variable | Start | After Step 5 | After Step 6 | After Step 10 |
|---|---|---|---|---|
| subject->state | null | null | 'ON' | 'ON' |
| subject->observers | [] | [Observer1, Observer2] | [Observer1, Observer2] | [Observer1, Observer2] |
Observer pattern: - Subject holds list of observers - Observers attach to subject - When subject state changes, it calls notify() - notify() calls update() on each observer - Observers react to changes independently