注册树模式

  1. 概念

    注册树模式也叫注册模式或注册器模式,顾名思义,注册树就是把对象实例注册到一棵全局的对象树上,需要对象的时候就从树上取下来,就好比树上长的果子,需要的时候就摘一个下来,只是这个对象树果子是摘不完的。

  2. 作用

    不管是单例模式还是工厂模式建立的对象,都没有得到很好的管理,用了注册树模式,就可以把创建出来的对象注册到全局树上,需要的时候取下来用,可以很好的管理创建的对象。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<?php
class DbMysql
{
public function conn()
{
echo 'mysql conn';
}
}

class DbSqlite
{
public function conn()
{
echo 'sqlite conn';
}
}

class MysqlFactory
{
public static function getIns()
{
return new DbMysql();
}
}

class SqliteFactory
{
public static function getIns()
{
return new DbSqlite();
}
}

//注册树实现存储对象(IOC控制反转思想)
class RegisterTree
{
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]);
}
}

//注册
RegisterTree::set('mysql', MysqlFactory::getIns());
RegisterTree::set('sqlite', SqliteFactory::getIns());

//客户端
// $mysql = RegisterTree::get('mysql');
// $mysql->conn();

// $sqlite = RegisterTree::get('sqlite');
// $sqlite->conn();

class Facade
{
public static $mysql;
public static $sqlite;

public function __construct()
{

self::$mysql = RegisterTree::get('mysql');
self::$sqlite = RegisterTree::get('sqlite');
}
}

new Facade();
Facade::$mysql->conn();
Facade::$sqlite->conn();