php中的观察者模式
程序员文章站
2023-04-07 21:17:53
观察者模式 复制代码 代码如下: interface subject { public function attach($observer); //添加观察者 public...
观察者模式
interface subject
{
public function attach($observer); //添加观察者
public function detach($observer); //踢出观察者
public function notify(); //满足条件时通知观察者
public function subjectstate($subject); //观察条件
}
class boss implements subject
{
public $_action;
private $_observer;
public function attach($observer)
{
$this->_observer[] = $observer;
}
public function detach($observer)
{
$observerkey = array_search($observer, $this->_observer);
if($observerkey !== false)
{
unset($this->_observer[$observerkey]);
}
}
public function notify()
{
foreach($this->_observer as $value )
{
$value->update();
}
}
public function subjectstate($subject)
{
$this->_action = $subject;
}
}
abstract class observer
{
protected $_username;
protected $_sub;
public function __construct($name,$sub)
{
$this->_username = $name;
$this->_sub = $sub;
}
public abstract function update(); //接收通过方法
}
class stockobserver extends observer
{
public function __construct($name,$sub)
{
parent::__construct($name,$sub);
}
public function update()
{
echo $this->_sub->_action.$this->_username." 你赶快跑...";
}
}
$huhansan = new boss(); //被观察者
$gongshil = new stockobserver("三毛",$huhansan); //初始化观察者
$huhansan->attach($gongshil); //添加一个观察者
$huhansan->attach($gongshil); //添加一个相同的观察者
$huhansan->detach($gongshil); //踢出基中一个观察者
$huhansan->subjectstate("警察来了"); //达到满足的条件
$huhansan->notify(); //通过所有有效的观察者
可以粗略的理解为,一个类(我们称之为被观察者),这个类继承了一个被观察者容器的借口
该接口中的方法有:添加观察者,踢出观察者,提醒观察者,和观察条件
添加观察者即相当于把一些类注册到这个容器之中,当然这些类的前提是需要有一个相应被观察者反应信息的方法,
被观察者容器通过接受不同的观察条件参数来判断是否需要提醒所有本容器中的已经注册过的观察者是否相应
一旦满足提醒条件,提醒容器内所有观察者让其调用相应方法并且实现对应观察者实例的变化
暂且理解到此!
复制代码 代码如下:
interface subject
{
public function attach($observer); //添加观察者
public function detach($observer); //踢出观察者
public function notify(); //满足条件时通知观察者
public function subjectstate($subject); //观察条件
}
class boss implements subject
{
public $_action;
private $_observer;
public function attach($observer)
{
$this->_observer[] = $observer;
}
public function detach($observer)
{
$observerkey = array_search($observer, $this->_observer);
if($observerkey !== false)
{
unset($this->_observer[$observerkey]);
}
}
public function notify()
{
foreach($this->_observer as $value )
{
$value->update();
}
}
public function subjectstate($subject)
{
$this->_action = $subject;
}
}
abstract class observer
{
protected $_username;
protected $_sub;
public function __construct($name,$sub)
{
$this->_username = $name;
$this->_sub = $sub;
}
public abstract function update(); //接收通过方法
}
class stockobserver extends observer
{
public function __construct($name,$sub)
{
parent::__construct($name,$sub);
}
public function update()
{
echo $this->_sub->_action.$this->_username." 你赶快跑...";
}
}
$huhansan = new boss(); //被观察者
$gongshil = new stockobserver("三毛",$huhansan); //初始化观察者
$huhansan->attach($gongshil); //添加一个观察者
$huhansan->attach($gongshil); //添加一个相同的观察者
$huhansan->detach($gongshil); //踢出基中一个观察者
$huhansan->subjectstate("警察来了"); //达到满足的条件
$huhansan->notify(); //通过所有有效的观察者
可以粗略的理解为,一个类(我们称之为被观察者),这个类继承了一个被观察者容器的借口
该接口中的方法有:添加观察者,踢出观察者,提醒观察者,和观察条件
添加观察者即相当于把一些类注册到这个容器之中,当然这些类的前提是需要有一个相应被观察者反应信息的方法,
被观察者容器通过接受不同的观察条件参数来判断是否需要提醒所有本容器中的已经注册过的观察者是否相应
一旦满足提醒条件,提醒容器内所有观察者让其调用相应方法并且实现对应观察者实例的变化
暂且理解到此!
上一篇: 郭台铭称富士康未侵权 微软意在诈取保护费
推荐阅读
-
php中mysql_real_escape_string()函数的用法介绍
-
PHP中数据类型转换的三种方式,数据类型三种方式_PHP教程
-
fileformatconverters PHP中for循环语句的几种变型
-
PHP中SESSION的注销与清除_php技巧
-
PHP中的strtr函数使用介绍(str_replace)
-
四种php中webservice实现的简单架构方法及实例
-
php中实现用数组妩媚地生成要执行的sql语句_php实例
-
php中session 与 cookie的区别以及用法
-
基于php的CMS中展示文章类实例分析_PHP
-
php中unlink()、mkdir()、rmdir()等的用法介绍