PHP設計模式

2021-09-13 02:20:36 字數 2538 閱讀 1694

[toc]

我們來看看報紙和雜誌的訂閱是怎麼回事:

觀察者模式就像訂閱報紙,知識名稱不太一樣:出版社改為「主題」(subject),訂閱者稱為「觀察者」(observer)。實現觀察者模式的方式不只一種,但是包含subject和observer介面的類設計的做法最常見。

主題可以註冊、登出觀察者,當資料改變時,可以通知觀察者;所有的觀察者必須繼承觀察者介面,這個介面只有乙個update()方法,當主題的狀態被改變時呼叫。主題繼承 splsubject,這個是php內建觀察者模式主題介面;觀察者繼承splobserver;同時,主題中用splobjectstorage來儲存觀察者列表。

這個是主題:

<?php

namespace observer2;

use splobserver;

class subject implements \splsubject

/*** 註冊觀察者

** attach an splobserver

* @link

* @param splobserver $observer * thesplobserverto attach.

* * @return void

* @since 5.1.0

*/public function attach(splobserver $observer)

/*** 登出觀察者

** detach an observer

* @link

* @param splobserver $observer * thesplobserverto detach.

* * @return void

* @since 5.1.0

*/public function detach(splobserver $observer)

/*** 通知觀察者

* notify an observer

* @link

* @return void

* @since 5.1.0

*/public function notify()}}

/*** 資料改變,同時通知觀察者

** @param $upd_data

*/public function upddata($upd_data)

/*** 訊息改變,同時通知觀察者

** @param $upd_msg

*/public function updmsg($upd_msg)

/*** @return mixed

*/public function getupddata()

/*** @return mixed

*/public function getupdmsg()

}

有乙個貓貓觀察者:

<?php

namespace observer2;

use splsubject;

class catobserver implements \splobserver

}

還有乙個狗狗觀察者:

<?php

namespace observer2;

class dogobserver implements \splobserver

}

來看一下呼叫吧:

<?php

include 'catobserver.php';

include 'subject.php';

include 'dogobserver.php';

// 觀察者

$catobserver = new \observer2\catobserver();

$dogobserver=new observer2\dogobserver();

// 主題

$subject = new \observer2\subject();

// 註冊觀察者

$subject->attach($catobserver);

$subject->attach($dogobserver);

// 主題有所變化,觀察者得到對應的變化

$subject->upddata(12);

$subject->updmsg('你媽媽喊你回家吃飯');

顯示結果:

i am 貓貓觀察者,i get new data:12;msg:還不該吃飯

i am 狗狗觀察者,data:12;msg:還不該吃飯

i am 貓貓觀察者,i get new data:12;msg:你媽媽喊你回家吃飯

i am 狗狗觀察者,data:12;msg:你媽媽喊你回家吃飯

把我的例子弄懂,你也應該能理解觀察者模式了。

來看一下你學到了什麼:

00原則--物件之間松耦合設計。

觀察者模式--在物件之間定義一對多的依賴,這樣一來,當乙個物件改變狀態,依賴他的物件就會收到通知,並自動更新。

php設計 PHP常用設計模式

1 單例模式指在整個應用中只有乙個物件例項的設計模式 class single public rand static private instance 類直接呼叫 final private function construct private防止外部new this rand mt rand 1,...

PHP設計模式 工廠設計模式

工廠模式,如其名稱一樣,就是乙個工廠,用於建立產品。使用工廠模式的好處就是請求者只需要發出請求,具體的例項化過程交給工廠模式,省去了new的過程。並且如果後期開發,類名發生變化,只需要調整工廠模式中一行new相關 不需要修改一大堆 最簡單的工廠模式,實際上就是乙個switch case結構,通過傳入...

php設計模式

php設計模式介紹 導言 php設計模式介紹 第一章 程式設計慣用法 php設計模式介紹 第二章 值物件模式 php設計模式介紹 第三章 工廠模式 php設計模式介紹 第四章 單條模式 php設計模式介紹 第五章 註冊模式 php設計模式介紹 第六章 偽物件模式 php設計模式介紹 第七章 策略模式...