php设计模式之注册树模式
网上讲的php注册树模式的文章还是挺多的,比如:http://www.jb51.net/article/71742.htm。这篇文章的内容在好多地方都有,而且没有表明是原创还是引用,已经分不清出处在哪里了......汗。不过文章的内容还不错,讲得也挺好的。之前有用过一点phalcon框架,其中的DI功能挺好用的,可以动态的注册一些有用的类进去,这样可以在其他地方方便的调取。其实它就是基于注册树的设计模式实现的,下面我写一个简答的实例来演示一下。
1 <?php 2 //创建单例 3 class Single{ 4 5 protected static $ins=null; 6 7 public static function getInstance( $objName ){ 8 9 $class = ucfirst( $objName ); 10 11 if (self::$ins instanceof $class ) { 12 return self::$ins; 13 } 14 15 self::$ins = new $class(); 16 return self::$ins; 17 } 18 } 19 20 //工厂模式 21 class RandFactory{ 22 23 public static function factory( $objName ){ 24 return Single::getInstance( $objName ); 25 } 26 } 27 28 //注册树 29 class Register{ 30 31 protected static $objects; 32 33 public static function set( $alias,$object ){ 34 self::$objects[$alias] = $object; 35 } 36 37 public static function get( $alias ){ 38 return self::$objects[$alias]; 39 } 40 41 public static function _unset( $alias ){ 42 unset( self::$objects[$alias] ); 43 } 44 } 45 46 //需要注册的类 47 class Rand 48 { 49 public function say() 50 { 51 echo "I am Rand"; 52 } 53 } 54 55 Register::set('rand', RandFactory::factory('rand')); 56 $object = Register::get('rand'); 57 $object->say();
比如我们有一个Rand类,我们在框架初始化的时候注册到注册树上,这样,只要我们想用的时候,直接从注册树上摘取这个对象,就可以很方便的去调用其中的方法。而且用工厂方式管理创建对象,省去了频繁的new对象,单例模式管理对象的创建也避免了对象的重复创建。
参考文章:
http://blog.csdn.net/gaoxuaiguoyi/article/details/50859712
声明:本文内容仅是本人学习的记录,不保证在项目中可用,若引用此代码导致了严重后果,本人不承担任何法律责任。