天天看點

PHP設計模式之——單例模式

首先我們看一個這樣的應用場景:

我們打開jd.com京東商城的官網首頁,我們看到很多商城裡的資料。我們知道頁面的資料來源于資料庫(亦或是緩存),從頁面而看,資料分成了不同的子產品,如下圖。

PHP設計模式之——單例模式
PHP設計模式之——單例模式

那麼問題來了,不同子產品的資料,是怎麼通過一個請求資源來請求的呢?換句話說,如果每一個sql都要執行一次資料庫連接配接,這将會是很多次連接配接,那麼是怎麼做到一個請求使用一個連接配接來處理的呢?

有幾種處理方式,java和.net(c#)等這樣編譯型的語言,可以在編譯後,把連接配接作為記憶體常駐的資源,這樣請求來了的時候,可以使用記憶體中使用的唯一連接配接資源;也有連接配接池這樣的方式,将很多的連接配接資源放到一個公共的連接配接池當中,當有需要的時候從中取出一個來進行業務處理。對于php這樣的解釋型語言的頁面級請求來說,頁面請求結束,php程序運作完成以後會釋放所有資源,而新的請求進來還會再次建立局部與全局變量,也就是在一次請求中連接配接需要作為唯一資源。以上幾種方式,都需要将連接配接作為唯一的一個執行個體來處理,也就是——單例模式。

什麼是單例?

單例,作為對象的一個建立模式,確定某一個類隻有一個執行個體,而且自行執行個體化并向整個系統全局提供這個唯一執行個體。不會建立執行個體的複制,而是會向單例類内部存儲的執行個體傳回一個引用。

單例模式有三個條件:

1,需要儲存類唯一執行個體的靜态成員變量

2,構造函數和析構函數聲明以及clone為私有,防止外部能夠new這個類或者克隆唯一執行個體,而失去單例的意義

3,要有一個公用的通路這個執行個體的靜态方法

什麼時候要用到單例模式呢?

1,應用程式與資料庫或者緩存進行互動

2,控制配置資訊

如何實作單例呢?

話不多說,直接上代碼