設計模式 觀察者模式

2022-07-29 19:36:12 字數 1848 閱讀 7507

在研究這個模式之前,我們要盡可能的知道物件導向程式設計的概念,充分了解"物件"的在程式中的含義。

"物件" 是乙個有自己的屬性、方法的整體。是乙個"類"的例項化的個體。我們可以把"類"看成乙個概念, 而物件就是這個"概念"的具體化的例項。比如說:」人「就是乙個概念,我們都是人,都屬於」人「類,我們每乙個個體就是」人「類具體化的例項物件,在php中,當我們new乙個類生成物件開始,這個物件就在記憶體中存在,不管我們給這個物件建立多少個引用(把這個物件付給某個或某些變數),這個物件在記憶體中永遠是唯一的,比如:

複製**

class a{}  

$a = new a;//這裡建立了乙個物件,並且它的引用為 $a  

$b = $a;//$a引用的物件又做了第二個引用$b,注意這裡不是複製,複製乙個物件用clone方法

$a->content = 'b';  

unset($a);  

//這時, 釋放的$a的記憶體, 但是它所指向的物件還在記憶體中存在, 並且它現在僅有乙個引用($b)  

echo $b->content; //這裡輸出: b

好了,理解了上面的內容,接下來的觀察者設計模式就相對簡單了.

」觀察者設計模式", 顧名思義就是有兩個成員,乙個成員稱之為"觀察者",乙個成員稱之為"被觀察者",當被觀察者的狀態發生改變時,可以被所有的觀察者收到(個人感覺,有點兒像觸發器的),與觸發器不同的是,被觀察者不需要知道有多少個觀察者(巨集觀上的概念),只需建立觀察者時,告訴誰是被觀察者就行了,當被觀察者發生改變的時候,所有的觀察者都要接收到通知,在**上的表現如下:

複製**

//建立被觀察者

$subject = new subject;

//在建立觀察者, 這時只需告訴被觀察者是誰

$observer1 = new observer1($subject);

$observer2 = new observer2($subject);

$observer3 = new observer3($subject);

$subject->message = '所有的觀察者, 都動起來吧 ';

$subject->notification();//被觀察者並不知道有幾個觀察者, 只要在建立觀察者時, 告訴被觀察者是誰就行了

怎麼樣?神奇吧!哈哈~這是怎麼實現的呢?請繼續把~

複製**

//被觀察者  

class subject  

//把觀察者的狀態(或是其他), 通知給被觀察者  

function notification()( $this->message );  

}  }  

}  }

//觀察者類1  

class observer1  

function updatemessage($message)  

//當被通知時, 告訴觀察者通知介面  

function updatefun()  

}  //觀察者類2  

class observer2  

function update($message)  

//當被通知時, 告訴觀察者通知介面  

function updatefun()  

}  //觀察者類2  

class observer3  

function notification($message)  

//當被通知時, 告訴觀察者通知介面  

function updatefun()  

}  看完了是不是覺得不神奇啦~,有點兒像魔術的意思吧!把所有的控制都封裝到了類的裡面,在外面直接呼叫就行了,這就是觀察者設計模式,只要按照這個規則寫好的**,然後外面用起來很舒服啦。也就是設計模式要達到的目標!!!

python 設計模式 觀察者 觀察者設計模式

在觀察者設計模式這種模式中,物件被表示為等待事件觸發的觀察者。一旦發生指定的事件,觀察者就會關注該主體。當事件發生時,主體告訴觀察者它已經發生。以下uml圖表示觀察者模式 如何實現觀察者模式?現在讓我們來看看如何實現觀察者模式。參考以下實現 import threading import time ...

設計模式 觀察者模式

觀察者模式定義了物件間一對多的依賴關係,乙個物件發生變化時,所有依賴它的物件都得到通知並被自動更新。本文主要闡述觀察者模式在分布式scada人機介面中的使用,利用這種模式使得人機介面顯示效率更高。發布者 郵局 觀察者 參與者 讀者 訂閱者 當郵局收到報社新雜誌的時候,即郵局狀態發生了改變,於是郵局把...

設計模式 觀察者模式

核心思想 註冊 通知 撤銷註冊 observer 將自己註冊到被觀察物件 subject 中,被觀察物件將觀察者存放在乙個容器 container 裡。被觀察物件發生了某種變化 如圖中的somechange 從容器中得到所有註冊過的觀察者,將變化通知觀察者。觀察者告訴被觀察者要撤銷觀察,被觀察者從容...