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
原文地址:https://www.cnblogs.com/ooooo/p/2247000.html