<?php
header("content-type:text/html;charset=utf-8");
#===================定义观察者、被观察者接口============
interface ITicketObserver //观察者接口
{
function onBuyTicketOver($sender, $args); //得到通知后调用的方法
}
interface ITicketObservable //被观察对象接口
{
function addObserver($observer); //提供注册观察者方法
}
#====================主题类实现========================
class HipiaoBuy implements ITicketObservable { //实现主题接口(被观察者)
private $_observers = array (); //通知数组(观察者)
public function buyTicket($ticket)
{
//循环通知,调用其onBuyTicketOver实现不同业务逻辑
foreach ( $this->_observers as $obs )
$obs->onBuyTicketOver ( $this, $ticket ); //$this 可用来获取主题类句柄,在通知中使用
}
//添加通知
public function addObserver($observer) //添加N个通知
{
$this->_observers [] = $observer;
}
}
#=========================定义多个通知====================
//同事通知
class HipiaoMan implements ITicketObserver {
public function onBuyTicketOver($sender, $ticket) {
echo (date ( 'Y-m-d H:i:s' ) . " 男同事收到消息:$ticket<br>");
}
}
class HipiaoManA implements ITicketObserver {
public function onBuyTicketOver($sender, $ticket) {
echo (date ( 'Y-m-d H:i:s' ) . " 男同事A收到消息:$ticket<br>");
}
}
//同事通知
class HipiaoWoman implements ITicketObserver {
public function onBuyTicketOver($sender, $ticket) {
echo (date ( 'Y-m-d H:i:s' ) . " 女同事收到消息:$ticket<br>");
}
}
$buy = new HipiaoBuy ();
$buy->addObserver ( new HipiaoMan() );
$buy->addObserver ( new HipiaoManA() );
$buy->addObserver ( new HipiaoWoman () );
//小秘书
$buy->buyTicket ( "老板回来了" );
header("content-type:text/html;charset=utf-8");
#===================定义观察者、被观察者接口============
interface ITicketObserver //观察者接口
{
function onBuyTicketOver($sender, $args); //得到通知后调用的方法
}
interface ITicketObservable //被观察对象接口
{
function addObserver($observer); //提供注册观察者方法
}
#====================主题类实现========================
class HipiaoBuy implements ITicketObservable { //实现主题接口(被观察者)
private $_observers = array (); //通知数组(观察者)
public function buyTicket($ticket)
{
//循环通知,调用其onBuyTicketOver实现不同业务逻辑
foreach ( $this->_observers as $obs )
$obs->onBuyTicketOver ( $this, $ticket ); //$this 可用来获取主题类句柄,在通知中使用
}
//添加通知
public function addObserver($observer) //添加N个通知
{
$this->_observers [] = $observer;
}
}
#=========================定义多个通知====================
//同事通知
class HipiaoMan implements ITicketObserver {
public function onBuyTicketOver($sender, $ticket) {
echo (date ( 'Y-m-d H:i:s' ) . " 男同事收到消息:$ticket<br>");
}
}
class HipiaoManA implements ITicketObserver {
public function onBuyTicketOver($sender, $ticket) {
echo (date ( 'Y-m-d H:i:s' ) . " 男同事A收到消息:$ticket<br>");
}
}
//同事通知
class HipiaoWoman implements ITicketObserver {
public function onBuyTicketOver($sender, $ticket) {
echo (date ( 'Y-m-d H:i:s' ) . " 女同事收到消息:$ticket<br>");
}
}
$buy = new HipiaoBuy ();
$buy->addObserver ( new HipiaoMan() );
$buy->addObserver ( new HipiaoManA() );
$buy->addObserver ( new HipiaoWoman () );
//小秘书
$buy->buyTicket ( "老板回来了" );