一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - php設計模式之觀察者模式的應用詳解

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

2020-03-26 14:42PHP教程網 PHP教程

本篇文章是對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();
?>

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 四虎黄色影视库 | 免费观看一区二区 | 小辣椒精品福利视频导航 | 我与恶魔的h生活ova | 国产一级片在线 | 嗯啊好大好爽 | 好姑娘在线完整版视频 | 国产精品va在线观看无 | 黄网在线观看免费网站台湾swag | blacked黑人hd2021 bestialityvideo另类 | www.99精品视频在线播放 | 鬼惨笑小说 | 日韩欧美不卡视频 | 天天干天天爽天天操 | 国产精品久久久久久福利 | 91香蕉视频在线播放 | 天美影视文化传媒mv免费 | 火影忍者小南裸羞羞漫画 | 奶茶视频官网免费 | 出轨同学会免费观看 | 五月天精品视频在线观看 | 欧美亚洲高清日韩成人 | 女人特黄大aaaaaa大片 | www.爱情岛论坛 | 99资源在线观看 | 农村老妇1乱69系列小说 | 婷婷在线观看香蕉五月天 | 国内精品一区二区三区东京 | 男女拍拍拍免费视频网站 | 毛片在线播放a | 久久囯产精品777蜜桃传媒 | 日韩成人影视 | 91小视频在线观看免费版高清 | 亚洲精品6久久久久中文字幕 | 久久精品视在线观看2 | 四虎影视在线影院在线观看观看 | 97色| 国产成人精品在线观看 | 好 舒服 好 粗 好硬免费视频 | 调教全程肉动画片在线观看 | xxx黑人又大粗又长 xxxx性欧美极品另类 |