您现在的位置是:首页 > 学无止境 >设计模式网站首页学无止境

设计模式之观察者模式

书单喵2018-07-26 01:31:4420862人围观
简介它是一种事件系统,意味着这一模式允许某个类观察另一个类的状态,当被观察的类状态发生改变的时候,观察类可以收到通知并且做出相应的动作;观察者模式提供了避免组件之间的紧密耦合的另一种方法
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();