观察者模式
来源:互联网 发布:阿里云域名备案服务号 编辑:程序博客网 时间:2024/06/15 05:39
<?php
/**
* 观察者模式
*/
class Paper{ /* 主题 */
private $_observers = array();
public function register($sub){ /* 注册观察者 */
$this->_observers[] = $sub;
}
public function remove( $sub ){
if( count( $this->_observers ) > 0 ){
array_shift($this->_observers);
}
}
public function trigger(){ /* 外部统一访问 */
$c = count($this->_observers);
if(!empty($this->_observers)){
foreach($this->_observers as $key => $observer){
$observer->update( $c , $key );
}
}
}
}
/**
* 观察者要实现的接口
*/
interface Observerable{
public function update( $c ,$key);
}
class Subscriber implements Observerable{
public function update( $c ,$key ){
$k = $key +1 ;
echo "现在一共有".$c."个人,您的队列位置为".$k;
}
}
class Subscriber1 implements Observerable{
public function update( $c ,$key ){
$k = $key +1 ;
echo "现在一共有".$c."个人,您的队列位置为".$k;
}
}
class Subscriber2 implements Observerable{
public function update( $c ,$key ){
$k = $key +1 ;
echo "现在一共有".$c."个人,您的队列位置为".$k;
}
}
/* 测试 */
$paper = new Paper();
$paper->register(new Subscriber());
$paper->register(new Subscriber1());
$paper->register(new Subscriber2());
$paper->trigger();
$paper->remove(new Subscriber());
$paper->trigger();
/**
* 观察者模式
*/
class Paper{ /* 主题 */
private $_observers = array();
public function register($sub){ /* 注册观察者 */
$this->_observers[] = $sub;
}
public function remove( $sub ){
if( count( $this->_observers ) > 0 ){
array_shift($this->_observers);
}
}
public function trigger(){ /* 外部统一访问 */
$c = count($this->_observers);
if(!empty($this->_observers)){
foreach($this->_observers as $key => $observer){
$observer->update( $c , $key );
}
}
}
}
/**
* 观察者要实现的接口
*/
interface Observerable{
public function update( $c ,$key);
}
class Subscriber implements Observerable{
public function update( $c ,$key ){
$k = $key +1 ;
echo "现在一共有".$c."个人,您的队列位置为".$k;
}
}
class Subscriber1 implements Observerable{
public function update( $c ,$key ){
$k = $key +1 ;
echo "现在一共有".$c."个人,您的队列位置为".$k;
}
}
class Subscriber2 implements Observerable{
public function update( $c ,$key ){
$k = $key +1 ;
echo "现在一共有".$c."个人,您的队列位置为".$k;
}
}
/* 测试 */
$paper = new Paper();
$paper->register(new Subscriber());
$paper->register(new Subscriber1());
$paper->register(new Subscriber2());
$paper->trigger();
$paper->remove(new Subscriber());
$paper->trigger();
0 0
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 如何使用iClient for JavaScript叠加地图
- ucosIII内核文件分析-os_msg.c
- POJ 2778 (AC自动机 矩阵快速幂)
- 从配置文件读取数据连接信息,利用泛型和java反射机制,写一个公共的增删改查数据库操作类
- iOS利用GCDAsyncSocket发送语音,以及语音wav转码amr
- 观察者模式
- Windows释放端口
- linux重启系统
- UIScrollerView上AutoLayout的总结
- 飞控信号SBUS信号解析为PWM信号输出
- 【每日一课】Python官方文档 5 --- 函数初步
- android Recyclerview仿京东,滚动屏幕标题栏渐变
- MFC代码修改窗口属性
- rest ( 大白话 )