观察者模式,包含观察者和被观察者,或者理解为订阅者和被发布者,所有观察者模式有时也被称为发布/订阅模式,该模式用于为对象实现发布/订阅功能:一旦主体对象状态发生改变,与之关联的观察者对象会收到通知,并进行相应操作
代码示例:
/**
* 观察者,订阅者
* Class A
*/
class A {
public function action()
{
(new B())->work(new self(), 'handle');
}
public function handle($data)
{
echo $data;
return;
}
}
/**
* 被观察者,发布者
* Class B
*/
class B {
public function work(A $obkect, $call_back)
{
$data = $this->getData();
if ($data) {
$obkect->$call_back($data);
}
return;
}
public function getData()
{
$data = 'hllo word!';
return $data;
}
}
/**
* demo
*/
(new A())->action();
//输出 hello word!
观察者模式优点是降低代码的耦合度,不然所有业务逻辑都要在在一个函数体处理,如果有更多的类型业务代码加入进来, 那这个代码就变得臃肿且难以维护, 因为要不停的往里面加入判断代码,这个时候其实就适用观察者模式了,使用了观察者模式如果有新的业务就相当于新增一个观察者来处理业务逻辑
观察者模式的局限性,即观察者只能处理与被观察者约定好的规范格式数据,也可以理解观察者是每个独立处理被观察者数据的函数之间调用关系结构集合
2356

被折叠的 条评论
为什么被折叠?



