<?php
date_default_timezone_set('PRC');
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
)
{
foreach
(
$this
->_observers
as
$obs
){
$obs
->onBuyTicketOver (
$this
,
$ticket
);
}
}
public
function
addObserver(
$observer
)
{
$this
->_observers [] =
$observer
;
}
}
#=========================定义多个通知====================
class
HipiaoMSM
implements
ITicketObserver {
public
function
onBuyTicketOver(
$sender
,
$ticket
) {
echo
(
date
( 'Y-m-d H:i:s' ) . " 短信日志记录:购票成功:
$ticket
<br>");
}
}
class
HipiaoTxt
implements
ITicketObserver {
public
function
onBuyTicketOver(
$sender
,
$ticket
) {
echo
(
date
( 'Y-m-d H:i:s' ) . " 文本日志记录:购票成功:
$ticket
<br>");
}
}
class
HipiaoDiKou
implements
ITicketObserver {
public
function
onBuyTicketOver(
$sender
,
$ticket
) {
echo
(
date
( 'Y-m-d H:i:s' ) . " 赠送抵扣卷:购票成功:
$ticket
赠送10元抵扣卷1张。<br>");
}
}
#============================用户购票====================
$buy
=
new
HipiaoBuy ();
$buy
->addObserver (
new
HipiaoMSM () );
$buy
->addObserver (
new
HipiaoTxt () );
$buy
->addObserver (
new
HipiaoDiKou () );
$buy
->buyTicket ( "一排一号" );