观察者模式代码php,PHP 观察者模式的实现代码

//被察者抽象类

class observed implements splsubject{

protected $_name;

protected $_observers;

//实例化,生成一个观察者对象

public function __construct(){

$this->_observers = new splobjectstorage();

}

// 添加观察者对象

public function attach(splobserver $observer){

$this->_observers->attach($observer);

}

//删除观者对象

public function detach(splobserver $observer){

$this->_observers->detach($observer);

}

//通知消息

public function notify(){

foreach($this->_observers as $observer){

$observer->showmessage($this);

}

}

//普通方法: 设置值

public function setname($name){

$this->_name = $name;

$this->notify();

}

//普通方法: 获取值

public function getname(){

return $this->_name;

}

//普通方法:设置年龄

public function setage($age){

$this->age = $age;

foreach($this->_observers as $observer){

$observer->showage($this->_name,$this->age);

}

}

}

// 观察者抽象类

class observer implements splobserver{

//显示消息提示

public function showmessage(splsubject $obj){

$user = $obj->getname();

if($user==='admin'){

echo '您好, ',$user,'欢迎您进入管理后台
';

}else{

echo "你好, '$user' 你已经被添加到了用户列表
";

}

}

//这是继承父类的抽象方法

public function update(splsubject $subject) {}

//显示个人年龄

public function showage($name,$age){

echo "";

}

}

$subject = new observed();  //生成一个被观察者对象

$observer = new observer(); //生成一个观察者对象

$subject->attach($observer);//把观察者传入到被观察中去

$subject->setname('张三'); //调用 setname 方法

/*

* 通过面的 setname 就会调用  $this->notify();

* 通过调用  $this->notify()就会调用 $observer->showmessage($this)方法,

* 即每个观察者对象的 showmessage($obj)方法;

*/

$subject->setname('admin');

$subject->setage(24);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值