這種模式比較簡單好理解,在php框架中會經常用到,在某些比較大的php框架中,會在初始化時將一些常用的類例項放在註冊器中,實際是存在註冊器類中的乙個靜態陣列中,以後想去用它的話,直接根據名稱就可以獲取到註冊器中儲存的例項。而不需要再次去new這個類、getinstance或者工廠方法獲得。我感覺這種模式有點像是把單例模式和簡單工廠模式結合起來了,例項化之後儲存在乙個靜態陣列中(類似單例模式的靜態變數),然後可以根據不同的引數去獲取註冊過的例項,這裡跟簡單工廠模式相比較的話,他可以動態的新增例項進去,而不需要去修改**,但這裡要注意的就是必須先註冊才可以獲取。
這個模式要注意幾個要點:
1. 首先就是要乙個管理要註冊的例項的類(例如:register),我們就加他註冊類吧。2. 這個註冊類必須有乙個靜態陣列變數,採用鍵值陣列(雜湊)方式儲存這些註冊的例項,其中鍵對應例項名,值對應例項。
3. 當然了,_set、_get、_unset(採用下劃線開始僅僅是因為unset是關鍵字,然後為了統一,就都加上了)這些方法都不能少,用來設定、獲取、和銷毀註冊器中的內容。
4. 其實這個註冊類可以看做是乙個裝載和解除安裝的過程,使用前進行裝載,當這個例項不在使用時就可以解除安裝了。
4. 這裡還需要注意,不能放太多的例項進去,有些例項用一次就可以銷毀掉了就不用儲存到註冊器中,免得浪費空間。
5. 註冊器中不同的名稱是可以儲存相同的例項的,因為他儲存時是有名稱作為索引。
<?php/*** 註冊器模式——例子
* @author 燕睿濤([email protected]) */
class
register
return
true
; }
/*** 從註冊器中解除乙個例項
* @param string $name 要註冊的類名
* @return true
*/public
static
function _unset($name
)
return
true
; }
/*** 從註冊器中獲取乙個例項
* @param string $name 要註冊的類名
* @return object/false
*/public
static
function _get($name
)
return
false
; }
}class
man}
register::_set('man1',new
man());
register::_get('man1')->say();
send me~
Php設計模式 行為型模式(三)
原文詳見 7 職責鏈模式 chainof responsibility 多個物件有機會處理請求,為請求傳送者和接收者解耦。就像銀行裡的取款機,不管那一台都可以取到錢。好處 簡單化物件隱藏鏈結構,便於新增新職責節點。弊端 請求可能沒有接受者,或者被多個接收者呼叫,效能降低。應用場景 處理多種請求。實現...
設計模式PHP版三 策略模式
定義策略介面 inte ce strategy inte ce strategy 加法類 class addition class addition implements strategy 減法類 class subtraction class subtraction implements stra...
PHP中三大設計模式
單例模式 工廠模式 註冊樹模式 class site 屬性 public sitename 本類靜態例項 protected static instance null 禁用掉構造器 private function construct sitename this sitename sitename ...