php 設計模式之觀察者模式(訂閱者模式)

2021-09-07 17:28:33 字數 2473 閱讀 3947

沒用設計模式的**,這樣的**要是把最上面那部分也要符合要求加進來,就要修改**,不符合寧增不改的原則

觀察者模式定義物件的一對多依賴,這樣一來,當乙個物件改變狀態時,它的所有依賴者都會收到通知自動更新!

所有的觀察者(observer)全部被註冊(register函式)進入陣列(事件的_observers陣列),這樣,當事件(例子中是*****)有變化的時候,就能通過遍歷(**19行)來通知所有的觀察者。每個觀察者再做他們自己對應的更新(**20行)。

在觀察者模式中,會改變的是主題的狀態以及觀察者的數目。用這個模式,你可以改變依賴於主題狀態的物件,卻不必改變主題。——找出程式中會變化的方面,然後將其和固定不變的方面相分離!

主題和觀察者都使用介面:觀察者利用主題的介面向主題註冊,而主題利用觀察者介面通知觀察者。這樣可以讓兩者之間運作正常,又同時具有松耦合的優點! ——針對介面程式設計,不針對實現程式設計! 。

觀察者模式利用「組合」將許多觀察者組合進主題中。物件(觀察者——主題)之間的這種關係不是通過繼承產生的,而是在執行時利用組合的方式產生的。 ——多用組合,少用繼承!

1

<?php2 /*

*3* 觀察者模式

4* @author: mac

5* @date: 2012/02/226*/

789class *****

1516

17public

function trigger()22}

23}24}

2526/**

27* 觀察者要實現的介面

28*/

29inte***ce

observerable

3233

class subscriber implements

observerable

37 }

下面是測試**

1

/*測試 */2

$***** = new

*****();

3$*****->register(new

subscriber());4//

$*****->register(new subscriber1());

5//$*****->register(new subscriber2());

6$*****->trigger();

當新物件要填入的時候,只需要在主題(又叫可觀察者)中進行註冊(註冊方式很多,你也可以在構造的時候,或者框架訪問的介面中進行註冊),然後實現**直接在新物件的介面中進行。這降低了主題物件和觀察者物件的耦合度。

好的設計模式不會直接進入你的**中,而是進入你的大腦中。

1/**

2* 事件產生類

3* class eventgenerator4*/

5abstract

class

eventgenerator614

15//

事件通知

16public

function

notify()

1721}22

23}2425/**

26* 觀察者介面類

27* inte***ce observer

28*/

29inte***ce

observer

3033

34/**35

* 觀察者1

36*/

37class observer1 implements

observer

3843}44

45/**46

* 觀察者1

47*/

48class observer2 implements

observer

4954}55

56/**57

* 事件

58* class event

59*/

60class event extends

eventgenerator

6170}71

72//

建立乙個事件

73$event = new

event();

74//

為事件增加旁觀者

75$event->add(new

observer1());

76$event->add(new

observer2());

77//

執行事件 通知旁觀者

78$event->trigger();

觀察者模式(訂閱模式)

定義物件間一種一對多的關係,使得每當乙個物件改變狀態,則所有依賴他的物件都會得到通知並被自動更新。使用場景 1 某些時候需要一些物件有所關聯,而且這種關聯是可以拆分而不是組合在一起的。2 某一事件發生,需要向多方觸發。3 訊息交換,如訊息佇列 事件匯流排的處理機制。1 subject 抽象主題,被觀...

訂閱者模式(觀察者模式)

include include include struct notification virtual void process 0 class subscribera public notification class subscriberb public notification class p...

php設計模式之 觀察者模式

觀察者模式 observer 當乙個物件狀態發生改變時,依賴它的物件全部收到通知,並自動更新。抽象被觀察者 abstract class eventgenerator 通知所有觀察者 public function notify 具體被觀察者class event extends eventgene...