美文网首页
设计模式(三行为模式)

设计模式(三行为模式)

作者: X1_blog | 来源:发表于2020-04-30 17:14 被阅读0次

观察者模式

构成

抽象被观察者 + 具体被观察者 + 抽象观察者 + 具体观察者

定义

被观察者具有修改观察列表 + 通知观察列表成员的能力, 观察者收到通知后对指定数据进行修改

DEMO

/*观察者模式*/
interface subject{  // 抽象被观察者
    function addObservers(concreteObserver $observer);
    function delObservers(concreteObserver $observer);
    function doNotify();
}
//  具体被观察者
class concreteSubject implements subject
{
    private $_observerList = [];
    public function addObservers(concreteObserver $observer){
        if(array_search($observer,$this->_observerList)===false){
            $this->_observerList[] = $observer ;
        }
    }
    function delObservers(concreteObserver $observer){
        $key = array_search($observer,$this->_observerList) ;
        if($key!==false){
            unset($this->_observerList[$key]);
        }
    }
    function doNotify(){
        foreach ($this->_observerList as $observer) {
            $observer->update();
        }
    }
}

interface observer{ // 抽象观察者
    function update();
}


class concreteObserver implements observer    //  具体观察者
{
    private $name ;
    function __construct($name)
    {
        $this ->name= $name;
    }
    function update(){
        echo $this ->name ." is update\n";
    }
}


class client
{
    static function main()
    {
        $subject = new concreteSubject();
        $observerA = new concreteObserver('observerA');
        $observerB = new concreteObserver('observerB');
        $observerC = new concreteObserver('observerC');
        $subject->addObservers($observerA);
        $subject->addObservers($observerB);
        $subject->addObservers($observerC);
        echo "first notify: \n";
        $subject->doNotify();
        $subject->delObservers($observerC);
        echo "second notify: \n";
        $subject->doNotify();
    }
}
client::main();

相关文章

网友评论

      本文标题:设计模式(三行为模式)

      本文链接:https://www.haomeiwen.com/subject/nnttghtx.html