<?php
// 主题接口
interface Subject{
public function register(Observer $observer);
public function notify();
}
// 观察者接口
interface Observer{
public function watch();
}
// 主题
class Action implements Subject{
public $_observers=array();
public function register(Observer $observer){
$this->_observers[]=$observer;
}
public function notify(){
foreach ($this->_observers as $observer) {
$observer->watch();
}
}
}
// 观察者
class Cat implements Observer{
public function watch(){
echo "Cat watches TV<hr/>";
}
}
class Dog implements Observer{
public function watch(){
echo "Dog watches TV<hr/>";
}
}
class People implements Observer{
public function watch(){
echo "People watches TV<hr/>";
}
}
// 应用实例
$action=new Action();
$action->register(new Cat());
$action->register(new People());
$action->register(new Dog());
$action->notify();
# 观察者接口
interface watch{
# 参与竞拍的方法
public function auction($price);
# 被通知的方法
function notify( $msg );
}
# 产生事件的类 竞拍之后通知所有人
class product {
private $people = [];
# 所有参与竞拍的人
function register( $user ){
$this -> people[] = $user;
}
# 通知所有人,现在有人竞拍了
function notify( $msg ){
foreach( $this -> people as $k => $v ){
$v -> notify($msg);
}
}
}
# 张三用户
class Zhangsan implements watch{
public function auction( $price ){
echo '张三出价了<br/>';
}
public function notify( $msg ){
echo '这里是张三这个用户,接受到的信息<br/>';
echo $msg .'<hr/>';
//exit;
}
}
# 李四用户
class Lisi implements watch{
public function auction( $price ){
echo '李四出价了<br/>';
}
public function notify( $msg ){
echo '这里是李四这个用户,接受到的信息<br/>';
echo $msg .'<hr/>';
//exit;
}
}
$product_obj = new Product();
# 张三参与竞拍
$product_obj -> register( new Zhangsan );
$lisi_obj = new Lisi();
$product_obj -> register( $lisi_obj );
# 李四出价
$lisi_obj -> auction(100);
$product_obj -> notify('李四出价100<br/>');
# 李四出价
$lisi_obj -> auction(130);
$product_obj -> notify('李四出价130<br/>');