好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > PHP設計模式之觀察者模式定義與用法示例

PHP設計模式之觀察者模式定義與用法示例

熱門標簽:電信外呼系統多少錢一個月 宿州正規外呼系統軟件 太原400電話申請流程 企業400電話辦理多少費用 萍鄉商鋪地圖標注 代理打電話機器人 合肥企業外呼系統線路 神龍斗士電話機器人 桂陽公司如何做地圖標注

本文實例講述了PHP設計模式之觀察者模式定義與用法。分享給大家供大家參考,具體如下:

?php
/**
 * Interface Observable
 * define a observable interface
 * @author jichao.wang
 */
interface Observable
{
  function attach(Observer $observer);
  function detach(Observer $observer);
  function notify();
}
/**
 * Class Login
 * @author jichao.wang
 */
class Login implements Observable
{
  private $observers;
  public $status;
  public $ip;
  const LOGIN_ACCESS = 1;
  const LOGIN_WRONG_PASS = 2;
  const LOGIN_USER_UNKNOWN = 3;
  function __construct()
  {
    $this->observers = array();
  }
  /**
   * @param Observer $observer
   * @author jichao.wang
   * attach a observer
   */
  function attach(Observer $observer)
  {
    $this->observers[] = $observer;
  }
  /**
   * @param Observer $observer
   * @author jichao.wang
   * detach a observer
   */
  function detach(Observer $observer)
  {
    $newObservers = array();
    foreach ($this->observers as $key => $obs) {
      if ($obs !== $observer) {
        $newObservers[] = $obs;
      }
    }
    $this->observers = $newObservers;
  }
  /**
   * @author jichao.wang
   * handle observer notify
   */
  function notify()
  {
    foreach ($this->observers as $obs) {
      $obs->update($this);
    }
  }
  /**
   * @author jichao.wang
   * 執行登陸
   */
  function handleLogin()
  {
    $ip = rand(1,100);
    switch (rand(1, 3)) {
      case 1:
        $this->setStatus(self::LOGIN_ACCESS, $ip);
        $ret = true;
        break;
      case 2:
        $this->setStatus(self::LOGIN_WRONG_PASS, $ip);
        $ret = false;
        break;
      case 3:
        $this->setStatus(self::LOGIN_USER_UNKNOWN, $ip);
        $ret = false;
        break;
    }
    /**
     * handle event
     */
    $this->notify();
    return $ret;
  }
  /**
   * @param $status
   * @author jichao.wang
   * set login status
   */
  function setStatus($status,$ip)
  {
    $this->status = $status;
    $this->ip = $ip;
  }
  /**
   * @return mixed
   * @author jichao.wang
   * get login status
   */
  function getStatus()
  {
    return $this->status;
  }
}
/**
 * Interface Observer
 * @author jichao.wang
 */
interface Observer {
  function update(Observable $observable);
}
/**
 * Class EmailObserver
 * @author jichao.wang
 */
class EmailObserver implements Observer {
  function update (Observable $observable) {
    $status = $observable->getStatus();
    if($status == Login::LOGIN_ACCESS){
//      $this->sendMail('用戶ip:'.$observable->ip.'登陸成功!');
      echo __CLASS__.'用戶ip:'.$observable->ip.'登陸成功!'.'------------------';
    }
    if($status == Login::LOGIN_WRONG_PASS){
//      $this->sendMail('用戶ip:'.$observable->ip.'登陸失敗,密碼錯誤!');
      echo __CLASS__.'用戶ip:'.$observable->ip.'登陸失敗,密碼錯誤!'.'------------------';
    }
    if($status == Login::LOGIN_USER_UNKNOWN){
//      $this->sendMail('用戶ip:'.$observable->ip.'登陸失敗,無此用戶!');
      echo __CLASS__.'用戶ip:'.$observable->ip.'登陸失敗,無此用戶!'.'------------------';
    }
  }
}
/**
 * Class PhoneObserver
 * @author jichao.wang
 */
class PhoneObserver implements Observer {
  function update (Observable $observable) {
    $status = $observable->getStatus();
    if($status == Login::LOGIN_ACCESS){
//      $this->sendMail('用戶ip:'.$observable->ip.'登陸成功!');
      echo __CLASS__.'用戶ip:'.$observable->ip.'登陸成功!'.'------------------';
    }
    if($status == Login::LOGIN_WRONG_PASS){
//      $this->sendMail('用戶ip:'.$observable->ip.'登陸失敗,密碼錯誤!');
      echo __CLASS__.'用戶ip:'.$observable->ip.'登陸失敗,密碼錯誤!'.'------------------';
    }
    if($status == Login::LOGIN_USER_UNKNOWN){
//      $this->sendMail('用戶ip:'.$observable->ip.'登陸失敗,無此用戶!');
      echo __CLASS__.'用戶ip:'.$observable->ip.'登陸失敗,無此用戶!'.'------------------';
    }
  }
}
class AbcObserver implements Observer {
  function update (Observable $observable) {
    $status = $observable->getStatus();
    if($status == Login::LOGIN_ACCESS){
//      $this->sendMail('用戶ip:'.$observable->ip.'登陸成功!');
      echo __CLASS__.'用戶ip:'.$observable->ip.'登陸成功!'.'------------------';
    }
    if($status == Login::LOGIN_WRONG_PASS){
//      $this->sendMail('用戶ip:'.$observable->ip.'登陸失敗,密碼錯誤!');
      echo __CLASS__.'用戶ip:'.$observable->ip.'登陸失敗,密碼錯誤!'.'------------------';
    }
    if($status == Login::LOGIN_USER_UNKNOWN){
//      $this->sendMail('用戶ip:'.$observable->ip.'登陸失敗,無此用戶!');
      echo __CLASS__.'用戶ip:'.$observable->ip.'登陸失敗,無此用戶!'.'------------------';
    }
  }
}
//實例化登陸信息
$login = new Login();
//實現發郵件觀察者
$login->attach(new EmailObserver());
//實現發驗證碼觀察者
$login->attach(new PhoneObserver());
//實現其他觀察者
$login->attach(new AbcObserver());
//開始登陸
$login->handleLogin();
?>

運行結果:

EmailObserver用戶ip:41登陸失敗,無此用戶!------------------PhoneObserver用戶ip:41登陸失敗,無此用戶!------------------AbcObserver用戶ip:41登陸失敗,無此用戶!------------------

更多關于PHP相關內容感興趣的讀者可查看本站專題:《php面向對象程序設計入門教程》、《PHP數組(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運算與運算符用法總結》、《php字符串(string)用法總結》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》

希望本文所述對大家PHP程序設計有所幫助。

您可能感興趣的文章:
  • PHP設計模式之觀察者模式(Observer)詳細介紹和代碼實例
  • php設計模式 Observer(觀察者模式)
  • PHP中常用的三種設計模式詳解【單例模式、工廠模式、觀察者模式】
  • PHP設計模式之中介者模式(Mediator Pattern)入門與應用案例詳解
  • PHP設計模式之迭代器(Iterator)模式入門與應用詳解
  • PHP設計模式之解釋器(Interpreter)模式入門與應用詳解
  • PHP設計模式之工廠模式(Factory)入門與應用詳解
  • php設計模式之適配器模式原理、用法及注意事項詳解
  • php設計模式 Template (模板模式)
  • php設計模式 Proxy (代理模式)
  • PHP常用的三種設計模式匯總
  • PHP設計模式之觀察者模式入門與應用案例詳解

標簽:太原 衡陽 崇左 辛集 鄂州 白銀 廊坊 綏化

巨人網絡通訊聲明:本文標題《PHP設計模式之觀察者模式定義與用法示例》,本文關鍵詞  PHP,設計模式,之,觀察者,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PHP設計模式之觀察者模式定義與用法示例》相關的同類信息!
  • 本頁收集關于PHP設計模式之觀察者模式定義與用法示例的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 男人的??伸到??里视频| 一本大道香蕉视频在线观看| 性夜黄A片爽爽爽免费视| 久久精品亚洲AV无码| 激情6月丁香婷婷色综合| 性生活大片免费看| 欧美人xxx| 蜜臀av无码久久精品色欲动图| 美女被cao免费观看| 张柏芝的逼| 人人揉人人捏人人添| 欧美xxxx三人交性视频| 欧美性色欧美a在线图片| 国产成人精品久久久久漫画 | 狠狠色欧美亚洲狠狠色www| 男生和女生搞黄色| 亚洲小日本xoxox少妇| 纲手被到爽羞羞漫画sss| 一级做a爰片久久毛片**| 免费**的网址| 成人免费看AA片jPg| 日韩欧美国产一区二区三区| 日韩黄色一级大片| 加勒比高清区一二区| 鲤鱼乡挺腰承受强迫受| 日韩欧美国产三级| 日本人妻巨大乳挤奶水av| 欧美性4k| 亚洲一区二区三区在线观看 | gogo专业大尺度高清人体天天| 一色屋网站| 国产乱婬AV国产888草莓Av| 欧美夫妇交换俱乐部在线观看| 免费无码又爽又刺激A片软件妖精| 97中文在线| 欧美肥大BBWBBw高潮| 玩弄稚嫩娇小的女H漫画| 国产AV人人夜夜澡人人爽麻豆 | 无码人妻一区二区三区免费n狂飙 蜜臀av国内精品久久久夜夜快色 无码vr熟妇人妻AV蜜桃 | 理论毛片| 贱妾罚妾跪趴sp文|