觀察者模式應用場景例項

2021-08-25 23:10:49 字數 1786 閱讀 7140

<?php

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

* *

* 場景描述:

* 哈票以購票為核心業務 ( 此模式不限於該業務 ) ,但圍繞購票會產生不同的其他邏輯,如:

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

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

* 3 、購票後傳送簡訊

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

* 5 、其他各類活動等

* * 傳統解決方案 :

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

* * 存在問題:

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

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

* * 存在問題原因主要是程式的 " 緊密耦合 " ,使用觀察模式將目前的業務邏輯優化成 " 松耦合 " ,達到易維護、易修改的目的,

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

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

* 1 、定義 2 個介面:觀察者(通知)介面、被觀察者(主題)介面

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

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

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

* * 示例:如以下**

* */

#***************==== 定義觀察者、被觀察者介面 **********==

/** *

* 觀察者介面 ( 通知介面 )

* */

inte***ce iticketobserver // 觀察者介面

/*** * 主題介面

* */

inte***ce iticketobservable // 被觀察物件介面

#******************** 主題類實現 ********************====

/** *

* 主題類(購票)

* */

class hipiaobuy implements iticketobservable

// 新增通知

public function addobserver($observer) // 新增 n 個通知}

#************************* 定義多個通知 ********************

// 簡訊日誌通知

class hipiaomsm implements iticketobserver

}// 文字日誌通知

class hipiaotxt implements iticketobserver

}// 抵扣卷贈送通知

class hipiaodikou implements iticketobserver

}#*************************=== 使用者購票 ********************

$buy = new hipiaobuy ();

$buy->addobserver ( new hipiaomsm () ); // 根據不同業務邏輯加入各種通知

$buy->addobserver ( new hipiaotxt () );

$buy->addobserver ( new hipiaodikou () );

// 購票

$buy->buyticket ( " 一排一號 " );

?>

觀察者模式應用場景例項

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

觀察者模式的應用

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

C 觀察者模式例項介紹

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