<?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' );
?>
输出
引用
default message
new message updated
new message updated
分享到:
相关推荐
Qt设计模式之观察者模式
采用Java语言编写的一个观察者模式实例。观察者模式(有时又被称为模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,...
java观察者模式观察者模式java观察者模式观察者模式java观察者模式观察者模式
观察者模式及实例,适合初学者阅读 。。。。。。。。。。。。。。。
观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式、模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件...
Java 观察者模式的浅析 简单地说,观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对象监察一个主题对象。这样一个主题对象在状态上的变化能够通知所有的依赖于此对象的那些观察者对象,使这些观察者...
观察者模式
java 设计模式 观察者模式 简单实例 包括测试test类
观察者模式:对象之间多对一依赖的一种设计方案,被依赖的对象为Subject,依赖的对象为Observer,Subject通知Observer变化,这个例子是java内置观察者模式
设计模式之观察者模式Java版本实现和UML类设计图
设计模式-观察者模式(讲解及其实现代码)
设计模式--观察者模式java例子
运用观察者模式及MVC模式的整合,是javaWeb的简单的实现了选民投票
观察者模式Demo,设计模式,观察者模式
观察者模式使用
iOS 设计模式 观察者模式
观察者模式小型框架
56丨观察者模式(上):详解各种应用场景下观察者模式的不同实现方式1