首先摘用印象深刻的一段:
观察者模式:从面向过程的角度来看,首先是观察者向主题注册,注册完之后,主题再通知观察者做出相应的操作,整个事情就完了。从面向对象的角度来看,主题提供注册和通知的接口,观察者提供自身操作的接口。(这些观察者拥有一个同一个接口。)观察者利用主题的接口向主题注册,而主题利用观察者接口通知观察者。耦合度相当之低。
下面是一个操作订单时,需要发送邮件信息 例子很好理解
/订单接口
interface order{
function addObserver();
function notify();
}
interface Observer{
function sendEmail();
}
//操作订单
class actionOrder implements order{
private $_observer = [];
function addObserver(Observer $observer){
$this->_observer[] = $observer;
}
function notify(){
foreach ($this->_observer as $observer) {
$observer->sendEmail();
}
}
}
//下单发送邮件
class upOrderObserver implements Observer{
public function sendEmail(){
echo '下单成功,订单号---1';
}
}
//退单发送邮件
class downOrderObserver implements Observer{
public function sendEmail(){
echo '退单成功,订单号---1';
}
}
$o = new actionOrder();
$o->addObserver(new upOrderObserver());
$o->addObserver(new downOrderObserver());
$o->notify();
//流程详解 先找到主体 然后根据主体的意图注册观察主体的个体。操作订单是整个主线(主体) 下单OR退单都需要发送邮件或者短信提醒用户或者
//告知系统或者其他操作 发送短信或者邮件就是个人 把个体注册到主体中 然后主体的方法封装个人的方法
个人认为 这个解释的不错 https://www.cnblogs.com/DeanChopper/p/4830134.html