그래서 디자인 패턴을 배우고 있으며 현재 Observer 패턴을 연구 중입니다.laravel에서 Observer 패턴을 실제로 사용하는 방법은 무엇입니까?
<?php
class Subject
{
private $foo;
private $bar;
private $observers = [];
public function addObserver(Observer $o)
{
$this->observers[] = $o;
}
public function removeObserver(Observer $o)
{
if(($key = array_search($o, $this->observers, $TRUE)) !== FALSE) {
unset($this->observers[$key]);
}
}
public function notify()
{
foreach ($this->observers as $observer) {
$observer->update($this->foo, $this->bar);
}
}
public function setFoo($foo)
{
$this->foo = $foo;
}
public function setBar($bar)
{
$this->bar = $bar;
}
}
interface Observer{
function update($foo, $bar);
}
class Observer1 implements Observer
{
private $foo;
private $bar;
public function update($foo, $bar){
$this->foo = $foo;
$this->bar = $bar;
}
public function display()
{
echo "Observer1 : Foo -> " . $this->foo . " Bar -> " . $this->bar . "\n";
}
}
class Observer2 implements Observer
{
private $foo;
private $bar;
public function update($foo, $bar){
$this->foo = $foo;
$this->bar = $bar;
}
public function display()
{
echo "Observer2 : Foo -> " . $this->foo . " Bar -> " . $this->bar . "\n";
}
}
$subject = new Subject;
$observer1 = new Observer1;
$observer2 = new Observer2;
$subject->addObserver($observer1);
$subject->addObserver($observer2);
$subject->setFoo(5);
$subject->setBar(10);
$subject->notify();
$observer1->display();
$observer2->display();
$subject->setFoo(20);
$subject->setBar(40);
$subject->notify();
$observer1->display();
$observer2->display();
그래서 나는 관찰자가 업데이트지고 있음을 참조하십시오
원시으로 그것을 구현하기 위해, 나는 이런 식으로 뭔가를했다. 이것을 관찰자 패턴을 구현하는 올바른 방법입니까? Subject에있는 기능을 추상화하여 자체 추상 클래스에 추가, 제거 및 알림 할 수 있다고 생각합니다. PHP가 제공하는SplSubject
과
SplObserver
도 사용할 수 있습니다. 이 코드를 더 잘 만들려면 여기에서 무엇을 할 수 있습니까?
하지만 실제로 알고 싶은 것은 Laravel에서 사용되는 Observer 패턴이 어디에 있는지입니다. 프레임 워크의 어딘가에서 사용해야하며 배울 수 있습니다. 둘째, 이것에 대한 실제 적용은 무엇입니까? 내가 생각할 수있는 것 중 하나는 laravel에서 캐싱을 수행 할 때 모델이 업데이트되면 캐시 객체에 변경 사항을 알릴 필요가있을 수 있습니다. 이것은 패턴의 좋은 실제 적용인가? 다른 사람들이 거기에 있습니까?