四虎精品视频-四虎精品成人免费网站-四虎黄色网-四虎国产视频-国产免费91-国产蜜臀97一区二区三区

php設計模式之觀察者模式的應用詳解

觀察者模式:定義對象間一種一對多的依賴關系,當一個對象的狀態發生改變時,所有依賴于它的對象都得到通知并自動更新。
觀察者類:
1.抽象主題角色:主題角色將所有對觀察者對象的引用保存在一個集合中,每個主題可以任意多個觀察者。抽象主題提供了增加和刪除觀察者對象的接口。
2.抽象觀察者角色:為所有的具體觀察者定義一個接口,在觀察的主題發生改變時更新自己
3.具體主題角色:存儲相關狀態到具體觀察者對象,當具體主題的內部狀態發生改變時,給所有登記過的觀察者發出通知。具體主題角色通常用一個具體子類實現。
4.具體觀察者角色:存儲一個具體主題對象,存儲相關狀態,實現抽象觀察者角色所要求的更新接口,以使得其自身狀態和主題的狀態保持一致
作用:
1. 觀察者模式的耦合度較小
2.支持廣播通信
復制代碼 代碼如下:
<?php
//抽象主題
interface Subject{
     public function attach($observer);
     public function detach($observer);
     public function notifyObservers();
}
//具體主題
class ConcreateSubject implements Subject{
     private $_observers;
     public function __construct(){
          $this->_observers = array();
     }

     public function attach($observer){
          return array_push($this->_observers,$observer);
     }

     public function detach($observer){
          $index = array_search($observer,$this->_observers);
          if($index === false || !array_key_exists($index,$this->_observers)){
               return false;
          }
          unset($this->_observer[$index]);
          return true;
     }

     public function notifyObservers(){
          if(!is_array($this->_observers)){
               return false;
          }
          foreach($this->_observers as $observer){
               $observer->update();
          }
          return true;
     }
}

//抽象觀察者
interface Observer{
     public function update();
}
//具體觀察者
class ConcreteObserver implement Observer{
     private $_name;
     public function __construct($name){
          $this->_name = $name;
     }

     public function update(){
          echo 'Observer',$this->_name.'has notified<br/>';
     }
}

//客戶端
class Client{
     public static function main(){
            $subject = new ConcreteSubject();
            //新增第一個觀察者
            $observer1 = new ConcreteObserver('Martin');
            $subject->attach($observer1);
            //通知
            $subject->notifyObservers();

            //新增第二個觀察者
            $observer2 = new ConcreteObserver('jaky');
            $subject->attach($observer2);
            //通知
            $subject->notifyObservers();

            //刪除觀察者1
            $subject->deatch($observer1);
            //通知
            $subject->notifyObservers();
     }
}

Client::main();
?>

php技術php設計模式之觀察者模式的應用詳解,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 喜马拉雅听| 赵士杰| 电影事物的秘密| 美丽的错误| 无人区电影免费观看| 鲁班书咒语大全| 少年派1主演名单| 徐若| 蜡笔小新日语| 美辰之屋| 林正英僵尸大全免费看| 镀金时代第三季什么时候播放| 丘淑贞| 老五| 天注定在线观看| 黑帮大佬和我的第365天| 陈建斌电影| 欧美黑人天堂av在线| 生死瞬间演员表| 天赐的声音在哪个平台播出| 台湾李丽萍十部必看电影| 金靖星座| 孤战迷城电视剧剧情介绍| 爱之梦钢琴谱| 电影院电影| 极品电影网| 韶山研学心得体会800高中| 黄色网址视频免费| 希崎| 大秦帝国第一部免费看| 朱丽安·摩尔| 混的人头像| 张国强个人简历| 新红楼梦电影| 黄老太| 迷夜电影| 中国夫妻性生活视频| 被调教的女人2| 是王者啊第二季免费观看完整版 | 哪吒电影1| 美少女战士奥特曼|