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

posted @ 2016-11-28 15:39  NickBai  阅读(420)  评论(0编辑  收藏  举报