zoukankan      html  css  js  c++  java
  • php设计模式 Observer(观察者模式)

    简介:这是php设计模式 Observer(观察者模式)的详细页面,介绍了和php,有关的知识、技巧、经验,和一些php源码等。

    class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=338277' scrolling='no'>
    1 <?php
    2 /**
    3 * 观察者模式
    4 *
    5 * 定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新
    6 * 能够便利地创建查看目标对象状态的对象,并且提供与核心对象非耦合的指定功能
    7 * 插件系统
    8 */
    9 class Observerable
    10 {
    11 private $_observers = array();
    12
    13 public function registerObserver($observer)
    14 {
    15 $this->_observers[] = $observer;
    16 }
    17
    18 public function removeObserver($observer)
    19 {
    20 $key = array_search($observer,$this->_observers);
    21 if(!($key === false))
    22 {
    23 unset($this->_observers[$key]);
    24 }
    25 }
    26
    27 public function notifyObservers()
    28 {
    29 foreach($this->_observers as $observer)
    30 {
    31 if($observer instanceof Observer) $observer->update($this);
    32 }
    33 }
    34 }
    35
    36 interface Observer
    37 {
    38 public function update($observer);
    39 }
    40
    41 interface DisplayElement
    42 {
    43 public function display();
    44 }
    45
    46 // -- 实例类定义
    47 class NewsObserverable extends Observerable
    48 {
    49 private $_sports_news;
    50 public function setSportsNews($data)
    51 {
    52 $this->_sports_news = $data;
    53 $this->notifyObservers();
    54 }
    55
    56 public function getSportsNews()
    57 {
    58 return $this->_sports_news;
    59 }
    60
    61 private $_local_news;
    62 public function setLocalNews($data)
    63 {
    64 $this->_local_news = $data;
    65 $this->notifyObservers();
    66 }
    67
    68 public function getLocalNews()
    69 {
    70 return $this->_local_news;
    71 }
    72 }
    73
    74 class SportsNews implements Observer,DisplayElement
    75 {
    76 private $_data = null;
    77 public function update($observer)
    78 {
    79 if($this->_data != $observer->getSportsNews())
    80 {
    81 $this->_data = $observer->getSportsNews();
    82 $this->display();
    83 }
    84 }
    85
    86 public function display()
    87 {
    88 echo $this->_data.date("Y-m-d H:i:s")."<br/>";
    89 }
    90 }
    91
    92 class LocalNews implements Observer,DisplayElement
    93 {
    94 private $_data = null;
    95 public function update($observer)
    96 {
    97 if($this->_data != $observer->getLocalNews())
    98 {
    99 $this->_data = $observer->getLocalNews();
    100 $this->display();
    101 }
    102 }
    103
    104 public function display()
    105 {
    106 echo $this->_data.date("Y-m-d H:i:s")."<br/>";
    107 }
    108 }
    109
    110 // -- 实例化 ---
    111
    112 $objObserver = new NewsObserverable();
    113 $local = new LocalNews();
    114 $sports = new SportsNews();
    115
    116 $objObserver->registerObserver($local);
    117 $objObserver->registerObserver($sports);
    118
    119 $objObserver->setSportsNews("sports news 1 ");
    120 $objObserver->setLocalNews("local news 1 ");
    121 $objObserver->removeObserver($sports);
    122 $objObserver->setLocalNews("local news 2 ");
    123 $objObserver->setSportsNews("sports news 2 ");
    124 $objObserver->removeObserver($local);
    125 $objObserver->setLocalNews("local news 3 ");

    爱J2EE关注Java迈克尔杰克逊视频站JSON在线工具

    http://biancheng.dnbcw.info/php/338277.html pageNo:9
  • 相关阅读:
    Window 窗口类
    使用 Bolt 实现 GridView 表格控件
    lua的table库
    Windows编程总结之 DLL
    lua 打印 table 拷贝table
    使用 xlue 实现简单 listbox 控件
    使用 xlue 实现 tips
    extern “C”
    COleVariant如何转换为int double string cstring
    原来WIN32 API也有GetOpenFileName函数
  • 原文地址:https://www.cnblogs.com/ooooo/p/2247000.html
Copyright © 2011-2022 走看看