观察者模式

<?php
#通知者类
class Sender
{
static private $instance = null;
private $observers = array();
private $message = 'default message';

#获取通知者实例
public static function getInstance()
{
if ( self::$instance == null )
{
self::$instance = new Sender();
}

return self::$instance;
}

#设置新消息,并通知所有观察者
public function setMessage( $newMessage )
{
$this->message = $newMessage;

$this->notifyObservers();
}

#注册观察者
public function registerObserver( $observer )
{
if( is_array( $observer ) )
{
foreach( $observer as $item )
{
if( $item instanceof Observer )
{
$this->observers[] = $item;
}
}
} else
{
if( $observer instanceof Observer )
{
$this->observers[] = $observer;
}
}
}

#通知所有观察者
private function notifyObservers()
{
foreach( $this->observers as $observer )
{
$observer->notify( $this->message );
}
}

#获取现有的消息
public function getMessage()
{
return $this->message;
}
}

#观察者接口
interface Observer
{
function notify( $message );
}

#观察者类
class Reciever implements Observer
{
public function notify( $message )
{
echo $message . ' updated' . '<br>';
}
}

#测试代码
$observers = array();

$reciever1 = new Reciever();
$observers[] = $reciever1;
$reciever2 = new Reciever();
$observers[] = $reciever2;

$sender = Sender::getInstance();

$sender->registerObserver( $observers );

$message = $sender->getMessage();
echo $message . '<br>';

$sender->setMessage( 'new message' );
?>


输出
[quote]default message
new message updated
new message updated[/quote]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值