PHP - 设计模式 - 观察者模式
<?php
//观察者模式
//抽象通知者
abstract class Subject {
protected $observer = array() ;
//添加观察者
public abstract function Attach(observer $observer);
//移除观察者
public abstract function Detach(observer $observer);
//通知观察者
punlic abstract function Notify();
}
//具体通知者
class ConcreteSubject extends Subject{
//通知者状态
public $subject_state;
//添加观察者
public function Attach(observer $observer){
array_push($this->subject_state ,$observer);
}
//移除观察者
public function Detach(observer $observer){
foreach ($this->observer as $key => $value) {
if ($val == $observer) {
unset($this->observer[$k])
}
}
}
//通知观察者
public function Notify(observer $observer){
foreach ($this->observer as $key => $value) {
$v->update();
}
}
}
//抽象观察者
abstract class Observer{
public abstract functioin update();
}
//具体观察者
class ConcreteObserver extends Observer{
private $name ;
private $subjectStats ;
//通知者
public $subject ;
public function __construct(ConcreteSubuject $_sub,$_name){
$this->subject = $_sub ;
$this->name = $_name ;
}
public function Update(){
$this->subjectStats = $this->subject->subject_state ;
echo "观察者".$this->name."的新状态是:".$this->subjectStats."<br/>"
}
}
$_s = new ConcreteSubject();
$a = new ConcreteObserver($_s,'a');
$b = new ConcreteObserver($_s,'b');
$c = new ConcreteObserver($_s,'c');
$_s->Attach($a);
$_s->Attach($b);
$_s->Attach($c);
$_s->subject_state = 'xxx';
$_s->Notify();
最新文章
- 配置Java EE Eclipse+Tomcat开发环境
- php文件删除
- VB IE 清除历史记录
- 【原创】JPEG图像密写研究(二) 哈夫曼树的建立
- (转)openURL的使用方法
- C#第七天
- ionic2 tabs使用自定义图标
- Qt日常备注(函数/接口实现)
- Reverse Words in a String III
- hibernate 3.6.10 maven pom.xml
- 微信小程序:模板消息推送提示{“errcode”:41030,”errmsg”:”invalid page hint: [gP1eXXXXXX]”}
- android MultiDex multidex原理下超出方法数的限制问题(三)
- Jenkins配置报告与邮件插件
- Spring Cloud 入门教程(二): 配置管理
- 枚举类型---java基础代码
- DevExpress gridcontrol Master-Detail绑定到对象类型
- bzoj3862
- Java程序设计10——与运行环境交互
- Junit4 单元测试框架的常用方法介绍
- 1014 我的C语言文法定义与C程序推导过程