PHP设计模式实例之(观察者模式、策略模式、简单工厂模式)
时间:2008-08-05
来源:互联网
观察者模式
PHP代码:
/*** 定义观察接口
*/
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(); //通过所有有效的观察者
作者: yangl2006 发布时间: 2008-08-05
作者: yangl2006 发布时间: 2008-08-05
作者: yangl2006 发布时间: 2008-08-05
作者: wwwjyw8 发布时间: 2008-08-05

作者: lxylxy888666 发布时间: 2008-08-06

作者: 七月十五 发布时间: 2008-08-06

作者: 生命如蓝 发布时间: 2008-08-06
作者: yangl2006 发布时间: 2008-08-06

作者: 夜雨飘零 发布时间: 2008-08-06


作者: mmca 发布时间: 2008-08-07
作者: jianzhong111 发布时间: 2008-08-12
作者: joj_79 发布时间: 2008-08-12
作者: kemy88 发布时间: 2008-08-12
作者: panjinww 发布时间: 2008-08-13

作者: wybmzyb 发布时间: 2008-08-13

作者: wybmzyb 发布时间: 2008-08-13

作者: BlueFlu 发布时间: 2008-08-14


作者: BlueFlu 发布时间: 2008-08-14


作者: haha_zhi 发布时间: 2008-08-14
作者: elsonwu 发布时间: 2008-08-14

作者: scc_166 发布时间: 2008-08-15
作者: xufeng8510 发布时间: 2008-08-15
作者: numsix 发布时间: 2008-08-15

作者: 小星 发布时间: 2008-08-15

作者: happyboy 发布时间: 2008-08-16

作者: martin2008 发布时间: 2008-08-19
作者: ljxok2001 发布时间: 2008-08-19
作者: slfyeye 发布时间: 2008-08-19

作者: kakashilw 发布时间: 2008-08-19

作者: 银子 发布时间: 2008-08-19
作者: Fish_sl 发布时间: 2008-08-19
作者: mall333 发布时间: 2008-08-19
作者: lanye 发布时间: 2008-08-20

作者: lzrabbit 发布时间: 2008-08-20

作者: vfasky 发布时间: 2008-08-20

作者: lin_chaoqi 发布时间: 2008-08-21
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28