Паттерн подписки: объект (Subject) хранит список наблюдателей и уведомляет их об изменениях.
interface Observer { public function update(Subject $subject): void; }
class Subject {
private array $observers = [];
public function attach(Observer $o): void { $this->observers[] = $o; }
public function notify(): void {
foreach ($this->observers as $o) { $o->update($this); }
}
}В PHP: Symfony EventDispatcher, Laravel Events. Слабая связь между издателем и подписчиками.