PHP設計模式 -- 觀察者模式

1、什麼是觀察者模式?

面向過程的角度來看,首先是觀察者向主題註冊,註冊完之後,主題再通知觀察者做出相應的操作,整個事情就完了。

面向對象的角度來看,主題提供註冊和通知的接口,觀察者提供自身操作的接口。(這些觀察者擁有一個同一個接口。)觀察者利用主題的接口向主題註冊,而主題利用觀察者接口通知觀察者。耦合度相當之低

2、流程圖如下:

 

 

 

3、具體代碼實現如下(省略了通知接口)

 1 <?php
 2 
 3 // 觀察者接口, 定義觀察者具體需要執行的方法
 4 interface Observer
 5 {
 6     public function eat();
 7 }
 8 
 9 
10 class Cat implements Observer
11 {
12     public function eat()
13     {
14         echo 111;
15     }
16 }
17 
18 class Dog implements Observer
19 {
20     public function eat()
21     {
22         echo 222;
23     }
24 }
25 
26 
27 class Action
28 {
29     // 保存所有已註冊的觀察者
30     private $obj = [];
31 
32     // 添加觀察者
33     // $observer 觀察者對象
34     public function addObserver($key, Observer $mode)
35     {
36         $this->obj[$key] = $mode;
37     }
38 
39     // 移除觀察者
40     public function remObserver($key)
41     {
42         unset($this->obj[$key]);
43     }
44 
45     // 廣播通知已註冊的觀察者
46     public function notify()
47     {
48         foreach ($this->obj as $value) {
49             $value->eat();
50         }
51     }
52 }
53 
54 $a = new Action();
55 $a->addObserver('cat', new Cat());
56 $a->addObserver('dog', new Dog());
57 $a->notify();

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章