APP開發專案中的PHP觀察者設計模式

2021-10-23 11:17:00 字數 2388 閱讀 7678

做專案過程中經常會遇到一種情況,寫乙個登陸介面,寫完後客戶有新需求需要增加統計登陸次數,過段時間又需要統計登陸地區,又過幾天又需要登陸推送活動或者新使用者獎勵,這種情況就容易讓**很雜亂,此時就可以用到觀察者模式。

概念:觀察者,首先要有個被人觀察的角色,這是唯一的,然後有多個觀察者去看他,可以形容為一群人在圍觀乙個人,有多個觀眾就得有個東西來記錄這些觀眾,這時候就需要乙個陣列來儲存所有觀察者,此時已經形成乙個被觀察者,多個觀察者和乙個容器記錄組成的乙個組合。

**示例:

//主題介面

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

inte***ce  observer
subject是被觀察者,observer是觀察者

//被觀察者

class  action  implements  subject

public function notify() }}

action 實現被觀察者介面,他現在是被觀察者,再定義乙個$_observers陣列,他就是存放觀察者的容器。

首先實現register方法,用它傳入乙個觀察者,然後塞到陣列裡,再實現notify()方法,他會遍歷容器陣列,執行每個觀察者的watch()方法。

觀察者

class  cat  implements  observer

}class people implements observer

}

這裡定義了兩個觀察者,全都實現observer介面,前面的subject會迴圈呼叫每個觀察者的watch方法,所以需要實現每個觀察者的watch方法

應用例項

$action = new action();

$action->register(new cat());

$action->register(new people());

$action->notify();

首先new被觀察者物件,執行它的register()方法,把每個觀察者都放入容器陣列,最後執行notify防範,通知所有觀察者執行自己的方法。

php原生自帶的觀察者模式

splsubject 介面 - 被觀察者

observer介面 - 觀察者

splobjectstorage物件 - 容器

首先需要乙個使用者登入類

class  user

}

然後讓他實現 splsubject 介面成為被觀察者。

1.首先在建構函式裡,讓他new splobjectstorage()物件並賦值到屬性上方便後邊呼叫

2.實現attach()方法,用來註冊觀察者

3.實現detach()方法,用來刪除觀察者

4.實現notify()方法,用來遍歷容器,呼叫每個觀察者的update方法(必須是update)

5.rewind方法是容器指標重置到最開始,valid方法檢測容器是否遍歷完成並返回布林,current方法獲取當前的觀察者,next方法是將指標後移以為

6.修改login()方法,在裡邊呼叫notify()來通知觀察者事件完成

**:

class  user  implements  splsubject

public function login()

public function attach($observer)

public function detach($observer)

public function notify()}}

觀察者

每個觀察者實現splobserver介面,並實現update() 方法

class  cat  implements  splobserver

}class people implements splobserver

}

應用

//實時觀察

$user = new user();

$user->attach(new cat());

$user->attach(new people());

$user->login();

關於php觀察者設計模式的解釋講到這裡也已經講完了,這些是我們在實際的專案開發當中遇到問題以及解決方案,以後我們也會定期在這裡分享這些內容;

PHP 觀察者模式

觀察者模式 定義物件間的一種一對多的依賴關係,以便當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並自動重新整理 能夠便利地建立檢視目標物件狀態的物件,並且提供與核心物件非耦合的指定功能 外掛程式系統 class observerable public function removeobse...

PHP觀察者模式

我理解的觀察者模式就是,當我們觸發乙個事件的時候,想要把這個操作告訴給我想要告訴的物件,讓他們都執行這個操作,就是將他們繫結到這個事件下。1.定義乙個基類 用於新增觀察者也就是我想要通知的物件,還有通知觀察者 eventgenerator.php abstract class eventgenera...

觀察者模式 php

觀察者模式 當你的某個功能在後期可能新增很多不太相干的功能時,可以考慮使用觀察者模式,如乙個使用者登入類,後期可能要求,記錄登入使用者日誌,簡訊提醒,郵件提醒等功能.個人更願意叫他補丁模式.簡單說,就是將每個補丁定義為乙個類,這些補丁類實現同一介面,這些補丁類實現同一方法.原始類只要接收這些補丁類的...