PHP設計模式(三),php設計模式
這種模式比較簡單好理解,在PHP架構中會經常用到,在某些比較大的PHP架構中,會在初始化時將一些常用的類執行個體放在註冊器中,實際是存在註冊器類中的一個靜態數組中,以後想去用它的話,直接根據名稱就可以擷取到註冊器中儲存的執行個體。而不需要再次去new這個類、getInstance或者Factory 方法獲得。我感覺這種模式有點像是把單例模式和簡單原廠模式結合起來了,執行個體化之後儲存在一個靜態數組中(類似單例模式的靜態變數),然後可以根據不同的參數去擷取註冊過的執行個體,這裡跟簡單原廠模式相比較的話,他可以動態添加執行個體進去,而不需要去修改代碼,但這裡要注意的就是必須先註冊才可以擷取。
這個模式要注意幾個要點:
1. 首先就是要一個管理要註冊的執行個體的類(例如:Register),我們就加他註冊類吧。
2. 這個註冊類必須有一個靜態陣列變數,採用索引值數組(雜湊)方式儲存這些註冊的執行個體,其中鍵對應執行個體名,值對應執行個體。
3. 當然了,_set、_get、_unset(採用底線開始僅僅是因為unset是關鍵字,然後為了統一,就都加上了)這些方法都不能少,用來設定、擷取、和銷毀註冊器中的內容。
4. 其實這個註冊類可以看做是一個裝載和卸載的過程,使用前進行裝載,當這個執行個體不在使用時就可以卸載了。
4. 這裡還需要注意,不能放太多的執行個體進去,有些執行個體用一次就可以銷毀掉了就不用儲存到註冊器中,免得浪費空間。
5. 註冊器中不同的名稱是可以儲存相同的執行個體的,因為他儲存時是有名稱作為索引。
php/** * 註冊器模式——例子 * @author 燕睿濤(luluyrt@163.com) */class Register{ /** * @var array $objects * 用來儲存註冊過的執行個體的變數 */ private static $_objects = array(); /** * 註冊一個執行個體到註冊器中 * @param string $name 要註冊的類名 * @param object $obj 要註冊的類執行個體 * @return true */ public static function _set($name,$obj){ if(!isset(self::$_objects[$name])){ self::$_objects[$name] = $obj; } return true; } /** * 從註冊器中解除一個執行個體 * @param string $name 要註冊的類名 * @return true */ public static function _unset($name){ if(isset(self::$_objects[$name])){ unset(self::$_objects[$name]); } return true; } /** * 從註冊器中擷取一個執行個體 * @param string $name 要註冊的類名 * @return object/false */ public static function _get($name){ if(isset(self::$_objects[$name])){ return self::$_objects[$name]; } return false; } }class Man{ public function say(){ echo "My name is Users!!"; }}Register::_set('man1',new Man());Register::_get('man1')->say();
send Me~
http://www.bkjia.com/PHPjc/920882.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/920882.htmlTechArticlePHP設計模式(三),php設計模式 註冊器模式 這種模式比較簡單好理解,在PHP架構中會經常用到,在某些比較大的PHP架構中,會在初始化時將一...