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