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

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

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();
?>

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 青青草国产免费久久久91 | 爆操俄罗斯美女 | 成人在线一区二区 | 天天摸日日舔 | 国产福利兔女郎在线观看 | 亚洲香蕉伊在人在线观婷婷 | 亚洲 欧美 国产 综合 播放 | 无套日出白浆在线播放 | 日本性漫画 | 欧美一卡二卡科技有限公司 | 婚前试爱免费看 | 99在线视频观看 | 国产成人综合网亚洲欧美在线 | 百合互慰吃奶互揉漫画 | 日本大学生xxxxx69泡妞 | 日本免费不卡在线一区二区三区 | 亚洲六月丁香六月婷婷蜜芽 | 日韩网站在线 | 91啦在线视频 | 成人免费视频一区 | 免费亚洲成人 | 成年人视频在线免费观看 | 波多野结衣被绝伦强在线观看 | 日本艳鉧动漫1~6在线观看 | 天天综合色天天综合 | 亚洲 欧美 国产 在线观看 | 动漫美女人物被黄漫在线看 | 久久久久久久99精品免费观看 | 国产第一综合另类色区奇米 | 久热这里在线精品 | 欧美日韩一区二区三区久久 | 啊皇上你好大要知画 | xxx95日本老师xxx学生 | 校园春色偷拍自拍 | 成人福利影院 | 亚洲精品高清中文字幕完整版 | 无人区在线观看免费观看 | 逼逼爱| 国产精品对白刺激久久久 | 国产一区二区在线观看美女 | 久见久热 这里只有精品 |