<?php
//开启报错
ini_set("display_errors", "On");
error_reporting(E_ALL | E_STRICT);
//观察者模式
//被观察者
interface Observed
{
//注册
public function attach(Observer $observer);
//删除
public function detach(Observer $observer);
//消息通知
public function notice();
}
//观察者
interface Observer
{
//业务处理
public function update(Observed $observed);
}
//实现观察者提示逻辑
//发送邮件提示
class Email implements Observer
{
public function update(Observed $observed)
{
if($observed->getState()==1){
echo "邮件发送成功<br>";
}
}
}
//记录日志
class Log implements Observer
{
public function update(Observed $observed)
{
if($observed->getState()==1){
echo "日志记录成功<br>";
}
}
}
//发送短信
class Message implements Observer
{
public function update(Observed $observed)
{
if($observed->getState()==1){
echo "短信发送成功成功<br>";
}
}
}
//生成订单
class Order implements Observed
{
//存储观察者对象
protected $observers=[];
//存储订单状态
protected $state=0;
/**
* 注册观察者
*/
public function attach(Observer $observer)
{
$key=array_search($observer,$this->observers);
if($key===false){
$this->observers[]=$observer;
}
}
/**
* 删除观察者
*/
public function detach(Observer $observer)
{
$key=array_search($observer,$this->observers);
if($key!==false){
unset($this->observers[$key]);
}
}
/**
* 生成订单
*/
public function addOrder($state){
$this->state=$state;
$this->notice();
}
public function notice()
{
foreach ($this->observers as $observer){
$observer->update($this);
}
}
/**
*
*/
public function getState(){
return $this->state;
}
}
$obj=new Order();
$obj->attach(new Email());
$obj->attach(new Message());
$obj->attach(new Log());
//生成订单
$obj->addOrder(1);
|