1. 程式人生 > 實用技巧 >php中用到的設計模式

php中用到的設計模式

單例:

面嚮物件語言裡最常用、也是最簡單的一種模式。單例就是單個例項,單個物件的意思,就是說我們去例項化一個類的時候,不管呼叫多少次,都永遠只有一個例項, 不會有多個,這樣就節省了記憶體分配開支。

先簡單說下單例模式的原理:將建構函式__construct設定為私有的private, 對外提供一個static靜態方法比如:getInstance獲得例項,在getInstance方法裡來做統一判斷是否有new一個例項,有的話直接返回,沒有就new一個,這樣就保證了不管外面呼叫多少次,只保證new了一次。

工廠模式:

當我要例項化類的時候,不直接new這個類,而是通過呼叫另一個類的一個方法來例項化。這就是工廠模式

的核心原理。

假設不使用工廠模式:比如很多地方呼叫類class_a,程式碼就會這樣子建立一個例項:new class_a(), 假設某天需要把class_a類的名子修改成class_b,意味著很多呼叫的程式碼都要修改。如果你用工廠模式,就你只需要改一處就可以了。當然這只是一個很極端的例子,沒人會吃飽了沒事幹會去修改類名。這也是工廠模式最簡單的用法。
工廠模式最多的用法,就是根據條件來建立不同的例項,比如你傳入一個mysql,我去例項化mysql類給你,你傳入sql server,那我就例項化sql server類給你。有點像switch乾的活。這樣就簡化了邏輯,統一控制,程式碼也比較簡化。

註冊模式:

註冊模式在單例模式的基礎上進一步拓展了一步,他把所有單例模式的物件全部儲存在一個索引陣列中,下次取得時候,直接去數組裡按照索引去取。這樣的好處是在程式中有條理的存放並管理物件。所以,肯定有一個存(set)和一個取(get)。一般是先去取如果沒有,就重新初始化然後存起來,這樣這個週期中的其他程式碼就可以直接取了。和redis快取的道理是一樣的。

介面卡模式:

就是將一些截然不同的函式介面封裝成統一的API,最簡單的例子就是DB類了。我們有mysql,mysqli,pdo等。如果我們專案中同時有這幾種資料庫存在,那麼做一些操作是很蛋疼的,因為它們的都有各自額api.所以,這個時候,我們可以用介面卡模式將3種不同的資料庫封裝成統一的api, 對外就是統一的方式呼叫。再比如我們專案中可能會用到的快取有redis,memcache等,我們也同樣可以把他們封裝成統一的API介面。