PHP設計模式之觀察者模式

2021-09-19 09:52:03 字數 1426 閱讀 3957

在我們的開發過程中,應該都或多或少的碰到過改動其中一部分**會引起其他一連串改變的問題,顯然想要完全避免這種情況不太可能,但我們也應答儘量減少對其他元件的依賴,而觀察者模式就是為了解決這個問題。

舉個例子來說,我們有乙個帖子物件,**如下:

class post

// 發帖方法

public function addpost()

}

class post

public function addpost()

if (!postscan::ipuserid($tihs->_ip))

if (!postscan::checkcontent($tihs->_content))

// ...

}}

隨著需要審核的字段越來越多,addpost方法變得越來越長,發布物件被也只能緊緊的被嵌入到該系統中。

觀察者模式的核心是把觀察者從主體中分離開來,當主體知道事件發生時,觀察需要被通知到,同時我們也不想把主體和觀察者之間的關係寫死,於是我們來修改下我們上面的**:

//主體必須實現的介面

inte***ce observable

//觀察者必須實現的介面

inte***ce observer

class post implements observable

public function attach(observer $observer)

public function detach(observer $observer)}}

public function notify()

}return true;

}public function addpost()

// ...

}}

通過上面的**,我們可以再很容易的加入審核規則。

觀察者模式是乙個很常見和常用的設計模式,以至於spl擴充套件已經為我們封裝好了對應的類和方法,下面的**是根據spl提供的3個元素:splobserver,splsubject,splobjectstorage來實現的**

class post implements splsubject

public function attach(splobject $observer)

public function detach(splobject $observer)

public function notify()

}return true;

}public function addpost()

// ...

}}

很簡單吧,最重要的是理解,在這個例子中,我們把一些審核的方法從帖子類中剝離了開來,而且該帖子物件也可以用來作為其他的發布型別。

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...