php例、観察者パターンを理解する
6734 ワード
/**
*
*
* : , , , , 。
*
* :
* ( ), , :
* 1、
* 2、
* 3、
* 4、 、 、
* 5、
*
* :
* , 。
*
* :
* 1、 , , 、 。
* 2、 , , 。
*
* " ", " ", 、 ,
* 。
*
* :
* 1、 2 : ( ) 、 ( )
* 2、 2 , 、
* 3、
* 4、 , 。
*
* :
*
*/
date_default_timezone_set(
'PRC'
);
//
#=================== 、 ============
/**
*
* ( )
*
*/
interface
ITicketObserver
//
{
function
onBuyTicketOver(
$sender
,
$args
);
//
}
/**
*
*
*
*/
interface
ITicketObservable
//
{
function
addObserver(
$observer
);
//
}
#==================== ========================
/**
*
* ( )
*
*/
class
HipiaoBuy
implements
ITicketObservable {
// ( )
private
$_observers
=
array
();
// ( )
public
function
buyTicket(
$ticket
)
// ,
{
// TODO
// , onBuyTicketOver
foreach
(
$this
->_observers
as
$obs
)
$obs
->onBuyTicketOver (
$this
,
$ticket
);
//$this ,
}
//
public
function
addObserver(
$observer
)
// N
{
$this
->_observers [] =
$observer
;
}
}
#========================= ====================
//
class
HipiaoMSM
implements
ITicketObserver {
public
function
onBuyTicketOver(
$sender
,
$ticket
) {
echo
(
date
(
'Y-m-d H:i:s'
) .
" : :$ticket
"
);
}
}
//
class
HipiaoTxt
implements
ITicketObserver {
public
function
onBuyTicketOver(
$sender
,
$ticket
) {
echo
(
date
(
'Y-m-d H:i:s'
) .
" : :$ticket
"
);
}
}
//
class
HipiaoDiKou
implements
ITicketObserver {
public
function
onBuyTicketOver(
$sender
,
$ticket
) {
echo
(
date
(
'Y-m-d H:i:s'
) .
" : :$ticket 10 1 。
"
);
}
}
#============================ ====================
$buy
=
new
HipiaoBuy ();
$buy
->addObserver (
new
HipiaoMSM () );
//
$buy
->addObserver (
new
HipiaoTxt () );
$buy
->addObserver (
new
HipiaoDiKou () );
//
$buy
->buyTicket (
" "
);
?>
次のように動作します.
2017-02-03 10:25:45 : :
2017-02-03 10:25:45 : :
2017-02-03 10:25:45 : : 10 1 。