PHP設計模式之“觀察者模式”,通俗易懂,讓你的代碼飛起

PHP設計模式之“觀察者模式”,通俗易懂,讓你的代碼飛起

設計模式

觀察者模式,當一個對象狀態發送改變時,依賴它的對象全部會收到通知,並自動更新。觀察者模式實現了低耦合,非侵入式的通知與更新機制。

PHP設計模式之“觀察者模式”,通俗易懂,讓你的代碼飛起

設計模式之觀察者模式

說實話,這個概念實在是不好理解,初次學習觀察者模式的開發者,看到這個概念都是一臉懵逼的感覺,小編也是,如果是光看概念,那絕對領悟不到其中的意思。接下來,咱們一起理解一下何為觀察者模式。

首先,什麼是當一個對象狀態發生改變,說白了就是實例對象方法的調用,也可以理解為事件觸發,方法調用完成後也代表狀態發生改變,這個時候就會通知依賴此實例對象的其他對象,什麼是依賴此對象的其他對象,拿編碼來說,就是在此對象中定義一個數組,然後把依賴它的對象給裝進去,這些被裝進此對象定義的數組中的其他對象就是觀察者了,等上述事件觸發完成後,循環這個觀察者數組調用每個觀察者的方法就實現了通知所有觀察者,但是這裡有一個要求,所有這些被註冊到此對象觀察者數組中的其他對象必須具有相同的接收通知的成員方法,可以這樣做,我們讓所有需要依賴此對象的所有對象具有符合標準的屬性和方法,接口,定義一個標準接口,這些觀察者類都來實現這個標準接口,這樣必然就要實現其中的成員方法,通知到觀察者後具體觀察者會做什麼動作,此對象並不關心,這也就實現瞭解耦。有些小夥伴可能會疑問,觀察者對象怎麼依賴到此對象中去呢?編碼層面解釋,在此對象中定義一個注入觀察者的方法addObserver(observer),接收對象類型參數,然後在此對象構造方法中調用$this->addObserver(new object());實現觀察者的注入,這樣以後如果說還要通知其他觀察者,只需要在構造方法裡面addObserver即可。好了,下面咱們用偽代碼和現實例子進行表述。

PHP設計模式之“觀察者模式”,通俗易懂,讓你的代碼飛起

php

例如:電商公司訂單出貨,出貨後需要更新實物庫存,修改訂單發貨狀態。

這裡的訂單出貨僅僅就是一個掃描動作,這個動作完成後代表對象狀態發生變化,也就是事件已觸發,接下來就需要通知觀察者已經出貨,每個觀察者根據自己的屬性做出相應動作。代碼如下:

發貨出庫:

PHP設計模式之“觀察者模式”,通俗易懂,讓你的代碼飛起

發貨出庫類

定義觀察者接口:

PHP設計模式之“觀察者模式”,通俗易懂,讓你的代碼飛起

觀察者接口

訂單發貨狀態:

PHP設計模式之“觀察者模式”,通俗易懂,讓你的代碼飛起

訂單類

產品減實物庫存:

PHP設計模式之“觀察者模式”,通俗易懂,讓你的代碼飛起

產品類

通過這個例子,就很好理解“觀察者模式”,只是在現實中的遇到的問題往往更復雜,這個就需要小夥伴們能夠仔細思考,發散思維,最後能夠抽絲剝繭,設計出比較好的代碼層次和結構。理解這個觀察者模式有點像消息裡面的訂閱模式。每天一點設計模式,讓你的代碼和思維越來越優化!

PHP設計模式之“觀察者模式”,通俗易懂,讓你的代碼飛起

設計模式之觀察者模式

今天的分享就到這裡,喜歡我的內容,歡迎轉發~~留言探討~~

謝謝!


分享到:


相關文章: