日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php事件的应用场景,php观察者模式应用场景实例详解

發布時間:2024/3/24 php 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php事件的应用场景,php观察者模式应用场景实例详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

PHP觀察者模式應用場景實例詳解:

header("Content-type:?text/html;?charset=utf-8");

/**

*?觀察者模式應用場景實例

*

*?免責聲明:本文只是以哈票網舉例,示例中并未涉及哈票網任何業務代碼,全部原創,如有雷同,純屬巧合。

*

*?場景描述:

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

*?1、購票后記錄文本日志

*?2、購票后記錄數據庫日志

*?3、購票后發送短信

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

*?5、其他各類活動等

*

*?傳統解決方案:

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

*

*?存在問題:

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

*?2、日積月累后,文件冗長,導致后續維護困難。

*

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

*?同時也符合面向接口編程的思想。

*

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

*?1、定義2個接口:觀察者(通知)接口、被觀察者(主題)接口

*?2、定義2個類,觀察者對象實現觀察者接口、主題類實現被觀者接口

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

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

*

*?示例:如以下代碼

*

*/

date_default_timezone_set('PRC');?//設置中國時區

#===================定義觀察者、被觀察者接口============

/**

*

*?觀察者接口(通知接口)

*

*/

interface?ITicketObserver?//觀察者接口

{

function?onBuyTicketOver($sender,?$args);?//得到通知后調用的方法

}

/**

*

*?主題接口

*

*/

interface?ITicketObservable?//被觀察對象接口

{

function?addObserver($observer);?//提供注冊觀察者方法

}

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

/**

*

*?主題類(購票)

*

*/

//實現主題接口(被觀察者)

class?HipiaoBuy?implements?ITicketObservable

{

private?$_observers?=?array?();????//通知數組(觀察者)

public?function?buyTicket($ticket)?//購票核心類,處理購票流程

{

//?TODO?購票邏輯

//循環通知,調用其onBuyTicketOver實現不同業務邏輯

foreach?(?$this->_observers?as?$obs?)

$obs->onBuyTicketOver?(?$this,?$ticket?);?//$this?可用來獲取主題類句柄,在通知中使用

}

//添加通知

public?function?addObserver($observer)?//添加N個通知

{

$this->_observers?[]?=?$observer;

}

}

#=========================定義多個通知====================

//短信日志通知

class?HipiaoMSM?implements?ITicketObserver

{

public?function?onBuyTicketOver($sender,?$ticket)

{

echo?date(?'Y-m-d?H:i:s'?),"短信日志記錄:購票成功:$ticket
";

}

}

//文本日志通知

class?HipiaoTxt?implements?ITicketObserver

{

public?function?onBuyTicketOver($sender,?$ticket)

{

echo?date('Y-m-d?H:i:s'),"文本日志記錄:購票成功:$ticket
";

}

}

//抵扣卷贈送通知

class?HipiaoDiKou?implements?ITicketObserver

{

public?function?onBuyTicketOver($sender,?$ticket)

{

echo?date('Y-m-d?H:i:s'),"贈送抵扣卷:購票成功:$ticket?贈送10元抵扣卷1張
";

}

}

#============================用戶購票====================

$buy?=?new?HipiaoBuy?();

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

$buy->addObserver(?new?HipiaoMSM()?);??//把短信通知類對象添加$_observers數組中

$buy->addObserver(?new?HipiaoTxt()?);??//把文本通知類對象添加$_observers數組中

$buy->addObserver(?new?HipiaoDiKou()?);//把贈送通知類對象添加$_observers數組中

//購票

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

遠行結果:

2017-02-10 10:50:51短信日志記錄:購票成功:一排一號

2017-02-10 10:50:51文本日志記錄:購票成功:一排一號

2017-02-10 10:50:51贈送抵扣卷:購票成功:一排一號 贈送10元抵扣卷1張

瀏覽器啟用彈出窗口過濾功能,將無法跳轉到下載頁。在瀏覽器地址欄右邊符號提示處點擊允許就可以了!

鄭重聲明:

1、本站源碼僅供個人學習研究和交流使用,請于下載后二十四小時內刪除

2、本站大多資源來源于互聯網、用戶分享,僅供學習交流使用,本站不提供任何技術支持

3、本站聯系方式Email:admin@youhutong.com ,收到郵件會第一時間處理。

4、如侵犯到任何版權問題,請立即告知本站(立即在線告知),本站將及時刪除并致以最深的歉意

總結

以上是生活随笔為你收集整理的php事件的应用场景,php观察者模式应用场景实例详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。