php设计模式 观察者
- 非常重要的设计模式
- 典型的解耦方法
- 实现依赖反转,你细细品
- 被观察者必是事件触发者,要将 [观察者 ] 加入事件触发通知列表
- 观察者必须有一个 [ 当事件触发者通知观察者的接受操作 ] 调用方法
- 被观察者要有一个当事件触发之后调用观察者的 [ 当事件触发者通知观察者的接受操作 ] 的方法
- 总结:本来主动调用, 现在我不直接调用你,也不去找你,把你放在观察者的列表里,我有变化通知你。
🙂, 店里正在上货,你别在店门口蹲我,你告诉我你需要,我上货好了叫你 , Biu~
声明一个基类, 表示一个事件产生者
使用抽象类
abstruct class EventGenerator{
private $Observers = []; // 事件发生者不知道哪些人观察着这个事件
// 为事件增加观察者
function addObserver(Observer $observer){
$this->Obeservers = $observer;
}
// 骨折通知所有观察者进行更新 update
function notify(){
foreach( $Observers as $obs){
$obs->update();
}
}
}
声明一个接口 Observer 这个是观察者, 也就是事件产生者被触发后通知谁
interface Observer {
// 表示, 事件发生了, 观察者本人要进行更新的操作,
// $event_info 用来 保存通知观察者的这个event的信息 $event_info
function update($event_info = null){
}
}
// 事件发生这
class Event extends EventGenerator{
trigger(){
echo "event trigger";
$this->notify();
}
}
class Method1 extends Observer {
public function update($info = null){
echo 'Method1';
}
}
class Method2 extends Observer {
public function update($info = null){
echo 'Method2';
}
}
class Method3 extends Observer {
public function update($info = null){
echo 'Method3';
}
}
$evt = new EventGenerator;
// 将观察者加入到监听列表中
$info = $evt->result;
$evt->addObserver( new Method1($info) );
$evt->addObserver( new Method2 );
$evt->addObserver( new Method3 );
$evt->trigger();
设计模式不是只有php用到,你去看vuejs源码… 你细品。你看看它怎么双向绑定的。
版本vue2 , vue3 源码我还没来得及看…
总结:
嘴上笑嘻嘻, 心里 XXX. XXX = So Easy Hahahaha…
论本赛季,如何被对队友带飞, 赛季开始第一周,惊艳队友纷纷出水
转载:https://blog.csdn.net/silvercell/article/details/116014619
查看评论