PHP三種常見設計模式

PHP三種常見設計模式

一、單例模式(Singleton)

單例模式也叫單態模式,是設計模式中最爲簡單的一種模式.

單例模式是指整個應用中類只有一個對象實例的設計模式。它通常被用來創建對象,確保某個類只有一個實例,而且自行實例化並向整個系統提供這個實例。

實際的應用場景:

1)數據庫連接一般也是採用單例模式,因爲數據庫連接是一種數據庫資源。主要是節省打開或者關閉數據庫連接所引起的效率損耗,這種效率上的損耗還是非常昂貴的,用單例模式來維護,就可以大大降低這種損耗。

2)應用程序的日誌應用,一般都用單例模式實現,這一般是由於共享的日誌文件一直處於打開狀態,因爲只能有一個實例去操作,否則內容不好追加。

二、工廠模式(factory)

工廠模式的最大優點在於創建對象上面,就是把創建對象的過程封裝起來,這樣隨時可以產生一個新的對象。減少代碼進行復制粘帖,耦合關係重,牽一髮動其他部分代碼。

通俗的說,以前創建一個對象要使用new,現在把這個過程封裝起來了。

實際的應用場景:

1)做支付接口的時候,可能對應不同的支付網關:支付寶、財付通、網銀在線等。方便未來擴展,設計成工廠模式。

2)php連接不同的數據庫:可能要連接mysql,也可能要連接sqlserver,還可能連接oracle等等其他的數據庫。那麼就需要做一個抽象的數據庫類。

3)在爲用戶註冊的時候,分爲很多種角色的用戶。比如冊用戶,匿名用戶、管理員用戶等。完全使用可以使用工廠的思想來實現,代碼也容易維護,爲每種角色可以生成操作的類。

 定義以下幾個類:

UserFactory 用戶工廠類,負責生成不同的用戶類

User:用戶類的基類,所有用戶類都是繼承這個類

不同角色的類:註冊用戶類、匿名用戶類、管理員用戶類

其實工廠模式有很多變體,抓住精髓纔是關鍵:只要是可以根據不同的參數生成不同的類實例,那麼就符合工廠模式的設計思想。

下圖爲簡單工廠模式:

 

運行結果:
送玫瑰,送戒指!
穿婚紗!

下圖爲工廠模式:

運行結果:
送玫瑰,送戒指!
穿婚紗!

下圖爲抽象工廠:

 

運行結果:
美女,我送你玫瑰和戒指!
我偷偷喜歡你
我要穿婚紗!
我好害羞哦!!

 

區別:
簡單工廠模式:用來生產同一等級結構中的任意產品。對與增加新的產品,無能爲力

工廠模式 :用來生產同一等級結構中的固定產品。(支持增加任意產品)
抽象工廠 :用來生產不同產品族的全部產品。(對於增加新的產品,無能爲力;支持增加產品族)

以上三種工廠 方法在等級結構和產品族這兩個方向上的支持程度不同。所以要根據情況考慮應該使用哪種方法

三、觀察者模式(observer)

當一個對象狀態發生改變時,依賴他的對象全部得到通知 

優點:低耦合、非侵入式

 該模式非常簡單:一個對象通過添加一個方法(該方法允許另一個對象,即觀察者註冊自己)使本身變得可觀察。當可觀察的對象更改時,它會將消息發送到已註冊的觀察者。這些觀察者使用該信息執行的操作與可觀察的對象無關。結果是對象可以相互對話,而不必瞭解原因。

觀察者設計模式非常常用,在一般複雜的WEB系統中,觀察者模式可以幫你減輕代碼設計的壓力,降低代碼耦合
實際應用場景:設計一個訂單類
1)訂單創建完成後,會做各種動作,比如發送EMAIL,或者改變訂單狀態等等。
2)原始的方法,是將這些操作都寫在create函數裏面
3)但是隨着訂單創建類的越來越龐大,這樣的操作已經無法滿足需求和快速變動
4)這個時候,觀察者模式出現了

代碼如下:

運行結果:
購買成功發送購買成功一個郵件改變訂單狀態

 再舉一個例子:

 

註冊/移除觀察者 如下代碼:

 

參考鏈接:https://segmentfault.com/a/1190000008803247

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章