<?php
// 被观察者接口
interface Observerd
{
//注册观察者
public function attach(Observer $observer);
//删除观察者
public function detach(Observer $observer);
//通知观察者
public function notify();
}
//实例被观察者
class Order implements Observerd
{
//存储观察者对象
protected $observers = [];
//订单状态 【0:失败,1:成功】
protected $state = 0;
//注册观察者
public function attach(Observer $observer)
{
// TODO: Implement attach() method.
$key = array_search($observer, $this->observers);
if ($key === false) {
$this->observers[] = $observer;
}
}
//删除观察者
public function detach(Observer $observer)
{
// TODO: Implement detach() method.
$key = array_search($observer, $this->observers);
if ($key !== false) {
//根据数组里的下标去销毁对象
unset($this->observers[$key]);
}
}
//通知观察者
public function notify()
{
// TODO: Implement notify() method.
foreach ($this->observers as $observer) {
$observer->update($this);
}
}
//订单生成
public function addOrder()
{
$this->state = 1;
$this->notify();
}
public function getState()
{
return $this->state;
}
}
//观察者接口
interface Observer
{
//观察者动作
public function update(Observerd $observerd);
}
//实例邮箱观察者
class Email implements Observer
{
public function update(Observerd $observerd){
if ($observerd->getState() == 1){
echo '邮件发送成功<br>';
}
}
}
//实例短信观察者
class Message implements Observer
{
public function update(Observerd $observerd){
if ($observerd->getState() == 1){
echo '短信发送成功<br>';
}
}
}
//实例日志观察者
class Log implements Observer
{
public function update(Observerd $observerd){
if ($observerd->getState() == 1){
echo '日志发送成功<br>';
}
}
}
$order=new Order();
$order->attach(new Email());
$order->attach(new Message());
$order->attach(new Log());
$order->addOrder();
PHP观察者模式
最新推荐文章于 2023-04-24 23:20:59 发布