PHP常用設計模式之觀察者模式

2021-08-21 12:27:43 字數 1780 閱讀 4895

概述

觀察者模式定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某乙個主題物件。這個主題物件在狀態發生變化時,會通知所有觀察者物件,使它們能夠自動更新自己。

觀察者模式特點

觀察者模式的初衷

將乙個系統分割成一系列相互協作的類有乙個很不好的***,那就是需要維護相關物件的一致性。我們不希望為了維持一致性而使各類緊密耦合,這樣會給維護、拓展和重用都帶來不便。

觀察者模式使用場景

**實現

基於 php spl 介面定義,實現觀察者模式 uml圖

實現思路

具體**:

usersubject實現splsubject介面,實現對observer物件的新增和刪除,並通知observer進行更新操作:

<?php 

namespace

designpattern\observer;

class

usersubject

implements \splsubject

public

function

attach

(\splobserver $observer)

public

function

detach

(\splobserver $observer)

public

function

setstatus

($status)

public

function

getstatus

() public

function

notify

() }

}

userobserver實現splobserver介面,更新操作的具體實現在其中:

<?php 

namespace

designpattern\observer;

use \splobserver;

class

userobserver

implements

splobserver

public

function

update

(\splsubject $subject)

}

測試檔案:
<?php 

namespace

designpattern\observer\tests;

usephpunit\framework\testcase;

usedesignpattern\observer\usersubject;

usedesignpattern\observer\userobserver;

class

testobserver

extends

testcase

}

測試結果:

總結優點:

缺點:參考文章

大話設計模式

圖說設計模式

php設計模式之 觀察者模式

觀察者模式 observer 當乙個物件狀態發生改變時,依賴它的物件全部收到通知,並自動更新。抽象被觀察者 abstract class eventgenerator 通知所有觀察者 public function notify 具體被觀察者class event extends eventgene...

PHP 設計模式之觀察者模式

介紹現在有兩派,有的人建議使用設計模式,有的人不建議使用設計模式!這就向寫文章一樣,有的人喜歡文章按照套路走,比如敘事性質的文章,時間,地點,人物,事件。而有的人喜歡寫雜文或者散文,有的人喜歡寫詩詞!很多時候,我看設計模式的時候,有些設計模式只是吻合我的 習慣。但是你硬去套它,那麼反而適得其反。很多...

php 設計模式之觀察者模式

觀察者模式 1.抽象事件發生類 abstract class eventgenerator 對 所有 觀察者 進行 事件 通知 function notify 2.宣告具體事件類 class event extends eventgenerator 3.宣告 乙個 觀察者 介面 inte ce ob...