デザインパターンについて学んでいます。現在、オブザーバーパターンを研究しています。生基づいて、それを実装するために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で使用されているオブザーバーパターンがどこにあるかです。それはフレームワークのどこかで使用されている必要があり、私はそれから学ぶことができます。第二に、これのための実用的なアプリケーションは何ですか?私が考えることのできるものの1つは、laravelでキャッシュを実行しているときにモデルが更新されたときに、変更するキャッシュオブジェクトに通知する必要がある場合があります。パターンの実用的な応用ですか?他には何がありますか?