header("Content-type:text/html;charset=utf-8"); /**
-
类名:Observer
-
说明:观察者模式 */ class Observer{ // 声明存放观察者容器 protected $container = array();
/*
- 新增观察者函数 */ public function addObserver($type, $observer) { $this->container[$type][] = $observer; }
/*
- 运行订单观察者 */ public function runObserver($type,$obj) { if (isset($this->container[$type])) { foreach ($this->container[$type] as $obser) { $obj = new $obser(); $obj->update($obj); } } } }
/**
-
类名:Order
-
说明:订单类
-
观察者模式的使用 */ class Order {
/*
- 创建订单 */ public function create($type,$observer) { echo '购买成功<br/>'; $observer->runObserver($type,$this); } }
/*
- 类名:Email
- 说明:邮件类 */ class Email { public static function update($order) { echo '发送邮件<br/>'; } } class Status { public static function update($order) { echo '改变订单状态<br/>'; } }
$type1 = 'buy'; $observer = new Observer(); $observer->addObServer($type1, 'Email'); $observer->addObServer($type1, 'Status');
$order = new Order(); $order->create($type1,$observer);
class Supply{ public function release($type,$observer){ echo "发布成功"; $observer->runObserver($type,$this); } }
class Sms{ public static function update($supply){ echo "推送消息"; } }
$type2 = 'release'; $observer2 = new Observer(); $observer2->addObserver($type2,'Sms');
$supply = new Supply(); $supply->release($type2,$observer2);