註冊樹模式固然也叫註冊模式,註冊器模式。數組
顧名思義,註冊器模式就是將對象註冊到全局樹上,那麼他就能夠被任意地方訪問。this
單例模式解決的是如何在整個項目中建立惟一對象實例的問題,工廠模式解決的是如何不經過new創建實例對象的方法。 那麼註冊樹模式想解決什麼問題呢? 實際上這兩種都有一個缺點(可能也不該該稱爲缺點,也可叫不足),有一個比較好的方法就是已經建立好的這個對象,直接去取這個對象,這個就是註冊器模式。code
首先咱們須要一個做爲註冊樹的類,這毋庸置疑。全部的對象「插入」到註冊樹上。這個註冊樹應該由一個靜態變量來充當。並且這個註冊樹應該是一個二維數組。這個類應該有一個插入對象實例的方法(set()),當讓相對應的就應該有一個撤銷對象實例的方法(_unset())。固然最重要的是還須要有一個讀取對象的方法(get())。擁有這些,咱們就能夠愉快地完成註冊樹模式啦~對象
//建立單例 class Single{ public $hash; static protected $ins=null; final protected function __construct(){ $this->hash=rand(1,9999); } static public function getInstance(){ if (self::$ins instanceof self) { return self::$ins; } self::$ins=new self(); return self::$ins; } } //工廠模式 class RandFactory{ public static function factory(){ return Single::getInstance(); } } //註冊樹 class Register{ //全局樹 array protected static $objects; //設置 public static function set($alias,$object){ self::$objects[$alias]=$object; } //得到 public static function get($alias){ return self::$objects[$alias]; } //註銷 public static function _unset($alias){ unset(self::$objects[$alias]); } } Register::set('rand',RandFactory::factory()); $object=Register::get('rand'); print_r($object);