* [ ] 工廠模式:工廠方法或者類生成對象,而不是在代碼中直接new
* [ ] 單例模式: 使某個類的對象僅允許創建一個
* [ ] 注冊模式: 全局共享和交換對象(在thinkphp中叫容器類,對象池)
*****
> 工廠模式:就是創建一個工廠類,在此類中new或實例化別的對象,注意它的方法是用static,其它類中可以直接調用而不用實例化.
> 單例模式: 就是不能被直接實例化的一個類,比如我們創建一個數據庫連接類,使用單例模式創建,代碼下:
```
namespace common;
class Database
{
protected static $instance;
private function __construct()
{
}
public static function getInstance()
{
if(self::$instance) {
return self::$instance;
}else {
self::$instance = new self();
return self::$instance;
}
}
public static function connect()
{
return 'mysql連接成功';
}
}
```
**工廠模式結合單例模式的用法:**
```
namespace common;
require 'common/Database.php';
class Factory
{
public static function createDatabase()
{
$db = Database::getInstance();
return $db;
}
}
```
**注冊樹模式:就是將類掛到全局樹上面,方便其它類調用**
namespace common;
```
class Register
{
protected static $objects
public static function set($alias, $object)
{
self::$objects[$alias] = $object;
}
public static function get($name)
{
return self::$objects[$name];
}
private function _unset($alias)
{
unset($objects[$alias]);
}
}
```
### 入口文件調用
```
require 'common/Factory.php';
require 'common/Register.php';
use common\Register;
use common\Factory;
Register::set('db1',Factory::createDatabase());
$db=Register::get('db1');
var_dump($db::connect());
```