一、工厂模式:工厂方法或类中生成对象,而不是在代码中直接 new
优点:将某个常用类,多个地方需要 new 时,使用工厂模式,方便类的扩展与维护
文件目录:Frame/Factory.php
<?php
namespace Frame;
use Frame\Database;
use Frame\Register;
class Factory
{
static function createDatabase()
{
//$db = new Database(); //正常实例化类
$db = Database::getInstance(); //获取单例模式的类
Register::set('db',$db); //将实例化后的类注册到全局注册树中
return $db;
}
}
//外部调用得到$db对象
$db = Frame\Factory::createDatabase();
//获取全局注册树中的对象
$db = Frame\Register::get('db');
//卸载全局注册树中的对象
$db = Frame\Register::_unset('db');
?>
二、单例模式:只允许在类的本身 new 实例化对象
优点:外部无法 new 该类,并且该对象在类本身创建一次,节约资源开销
文件目录:Frame/Database.php
<?php
namespace Frame;
class Database
{
protected $db;
//单例模式,私有化__construct()方法,不允许外部实例化对象
private function __construct()
{
}
//实例化本类
static function getInstance()
{
if(self::$db) {
return self::$db;
} else {
self::$db = new self();
return self::$db;
}
}
}
//外部调用
$db = Frame\Database::getInstance();
?>
三、注册树模式:将某个对象注册到全局注册树中,便于全局使用
存放目录:Frame/Register.php
<?php
namespace Frame;
class Register
{
protected $objects;
/*
* 将实例化后的类注册到全局注册树中
* $alias :对象别名
* $object:实例化后的对象
*/
static function set($alias,$object)
{
self::$objects[$alias] = $object;
}
/*
* 卸载实例化后的类
* $alias :对象别名
*/
static function _unset($alias)
{
unset(self::$objects[$alias]);
}
/*
* 获取实例化后的类对象
* $alias : 对象别名
*/
static function get($alias)
{
return self::$objects[$alias];
}
}
?>
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。