首頁 >後端開發 >php教程 >php 观察者模式

php 观察者模式

WBOY
WBOY原創
2016-06-23 13:36:23851瀏覽

先不说定义,先来看运用场景,这些定义咋的,老蒙,由场景想到设计模式显然是比较好理解的一个方法。

场景:新用户名注册完 要完成的工作:1,新用户送积分  2,新用户送优惠? 3,记录新用户log日志

观察者模式:

  通过场景我们可以分析,当用户注册完,系统要执行一系列业务逻辑,我们可以把这一系列业务逻辑看成观察者,分别有积分类观察者,优惠?类观察者,log类观察者,

这些观察者一直在监听用户类,当用户执行注册这个动作之后,观察者们各自开始自己的业务逻辑。

 

分析:整个运用场景可以有两个类完成,一个是观察者类,另一个是被观察类(主题),他们有各自的接口,观察者类接口是接收到被观察者的通知之后,更新状态,被观察者接口是

 

//主题类接口(被观察者)
interface SubjectInterface{
    public function  addObserver();
}
//观察者接口
interface ObserverInterface{
    public function beginActionAfterNotifity();
}

//主题类
class  Subject implements SubjectInterface{
    private $_oberver=array();
    //添加观察者
    public function addObserver($oberver){
        $this->_oberver[]=$oberver;
    }
    //通知
    public function notifity(){
        foreach ($this->_oberver as $oberver){
            $oberver->beginActionAfterNotifity();
        }
    }
    
}
//积分类
class Point implements ObserverInterface{
    public function beginActionAfterNotifity(){
        echo "送积分啦";
    }
}
//优惠?类
class Coupon implements ObserverInterface{
    public function beginActionAfterNotifity(){
        echo "送优惠?啦";
    }
}
//日志类
class Log implements ObserverInterface{
    public function beginActionAfterNotifity(){
        echo "你被记录了";
    }
}


//动作类
class User {
    function addUser(){
        //添加新用户之后
        $this->addObserver();
    }    
    function addObserver(){
        $subject=new Subject();
        $subject->addObserver(new Point());
        $subject->addObserver(new Coupon());
        $subject->addObserver(new Log());
    }
}

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn