观察者模式,它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。当具体主题的内部状态改变时,给所有登记过的观察者发出通知。
观察者也称为发布-订阅(Publish-Subscribe)模式
观察者这个名字让我感觉理解起来很费力,其实用别名“消息订阅发布模式”更容易理解。
观察者在功能类订阅某种类型的消息后,只要功能类有这种变化,就向观察者告知(发布)。
Laravel框架里的事件机制就是利用了这种设计模式。
观察者也称为发布-订阅(Publish-Subscribe)模式
代码如下:
<?php
interface Subject{
public function attach($params);
public function detach($params);
public function notify();
}
class Stock implements Subject{
private $users = [];
public function attach($user) {
array_push($this->users, $user);
}
public function detach($user) {
$index = array_search($user, $this->users);
array_splice($this->users, $index, 1);
}
public function notify() {
foreach($this->users as $user) {
$user->operate();
}
}
}
interface Observer{
public function operate();
}
class User implements Observer{
public function operate() {
//股票加减仓
echo 'stock add or reduce positions';
}
}
//client
$user = new User();
$stock = new Stock();
$stock->attach($user);
$stock->notify();
最后总结:观察者这个名字让我感觉理解起来很费力,其实用别名“消息订阅发布模式”更容易理解。
观察者在功能类订阅某种类型的消息后,只要功能类有这种变化,就向观察者告知(发布)。
Laravel框架里的事件机制就是利用了这种设计模式。