设计模式之观察者模式
它是一种事件系统,意味着这一模式允许某个类观察另一个类的状态,当被观察的类状态发生改变的时候,观察类可以收到通知并且做出相应的动作;观察者模式提供了避免组件之间的紧密耦合的另一种方法
header('content-type:text/html;charset=utf-8');
# 被观察对象
interface IWeather
{
public function addObserve(IObs $sub);//添加观察
public function delObserve(IObs $sub);//删除观察
public function thunder(); //打雷事件
}
//娶亲场景
class QuQin implements IWeather
{
private $_arrObserve = [];
public function addObserve( IObs $sub )
{
$this->_arrObserve[] = $sub;
}
public function delObserve( IObs $sub )
{
if(isset($this->_arrObserve[$sub])){
unset($this->_arrObserve[$sub]);
}
}
public function thunder()
{
echo '轰隆隆...劈叉...';
if( !empty($this->_arrObserve) ){
foreach( $this->_arrObserve as $obj){
$obj->warning();
}
}
}
}
# 观察者要实现的
interface IObs
{
public function warning();
}
class TangSanZang implements IObs
{
public function warning()
{
echo '打雷啦!下雨啦! 赶紧回家收衣服啊';
}
}
# 创建一个被观察者
$day = new QuQin();
# 添加一个观察者
$day->addObserve(new TangSanZang());
# 观察者触发一个行为
$day->thunder();
来自为知笔记(Wiz)