觀察者模式應用場景例項

2021-07-23 14:53:56 字數 2117 閱讀 3669

<?php

/** * 

觀察者模式應用場景例項 *

* * 場景描述: * 

哈票以購票為核心業務

(此模式不限於該業務

),但圍繞購票會產生不同的其他邏輯,如:

* 1、購票後記錄文字日誌

* 2、購票後記錄資料庫日誌

* 3、購票後傳送簡訊

* 4、購票送抵扣卷、兌換卷、積分

* 5、其他各類活動等 *

* 傳統解決方案:

* 在購票邏輯等類內部增加相關**,完成各種邏輯。 *

* 存在問題:

* 1、一旦某個業務邏輯發生改變,如購票業務中增加其他業務邏輯,需要修改購票核心檔案、甚至購票流程。

* 2、日積月累後,檔案冗長,導致後續維護困難。 *

* 存在問題原因主要是程式的

"緊密耦合

",使用觀察模式將目前的業務邏輯優化成

"松耦合

",達到易維護、易修改的目的, * 

同時也符合面向介面程式設計的思想。 *

* 觀察者模式典型實現方式:

* 1、定義2

個介面:觀察者(通知)介面、被觀察者(主題)介面

* 2、定義2

個類,觀察者物件實現觀察者介面、主題類實現被觀者介面

* 3、主題類註冊自己需要通知的觀察者

* 4、主題類某個業務邏輯發生時通知觀察者物件,每個觀察者執行自己的業務邏輯。 *

* 示例:如以下** *

*/#***************====

定義觀察者、被觀察者介面

**********==

/** *

* 觀察者介面

(通知介面)

* */

inte***ceiticketobserver 

//觀察者介面

/** *

* 主題介面 *

*/inte***ceiticketobservable 

//被觀察物件介面

#********************

主題類實現

********************====

/** *

* 主題類(購票) *

*/classhipiaobuyimplementsiticketobservable

//新增通知

public functionaddobserver($observer) 

//新增

n個通知

} #*************************

定義多個通知

******************** //

簡訊日誌通知

classhipiaomsmimplementsiticketobserver }

//文字日誌通知

classhipiaotxtimplementsiticketobserver }

//抵扣卷贈送通知

classhipiaodikouimplementsiticketobserver }

#*************************===

使用者購票

********************

$buy =newhipiaobuy ();

$buy->addobserver (newhipiaomsm () ); 

//根據不同業務邏輯加入各種通知

$buy->addobserver (newhipiaotxt () );

$buy->addobserver (newhipiaodikou () ); //

購票 $buy->buyticket ( 

"一排一號

" );

?>

觀察者模式應用場景例項

觀察者模式應用場景例項 場景描述 哈票以購票為核心業務 此模式不限於該業務 但圍繞購票會產生不同的其他邏輯,如 1 購票後記錄文字日誌 2 購票後記錄資料庫日誌 3 購票後傳送簡訊 4 購票送抵扣卷 兌換卷 積分 5 其他各類活動等 傳統解決方案 在購票邏輯等類內部增加相關 完成各種邏輯。存在問題 ...

觀察者模式的應用

在層與層之間如果存在著直接的相互依賴的關係,那麼可以利用觀察者模式將直接的依賴關係轉化成間接的依賴關係,並且用這種模式降低層與層之間的偶合度.class fg o sgobserver 註冊為作業系統的接收者的物件通過該介面來接收系統訊息 virtual void o essage fg messa...

C 觀察者模式例項介紹

觀察者模式 觀察者模式 定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某乙個主體物件,這個主題物件在狀態發生變化時,會通知所有觀察者。當乙個物件改變需要同時改變其他物件,而且他不知道具體有多少物件需要改變的時候,應該考慮使用觀察者模式。觀察者結構圖 使用場景 老闆回來通知員工需要進入工作狀態。...