index.php 公共部分
define('BASEDIR',__DIR__);
include BASEDIR.'/Frame/Loader.php';
spl_autoload_register('\\Frame\\Loader::autoload');Loader.php
<?php
namespace Frame;
class Loader
{
static function autoload($class)
{
require BASEDIR.'/'.str_replace('\\','/',$class).'.php';
}
}创建Register.php 类
<?php
namespace Frame;
class Register
{
protected static $objects;//存放对象
// $alias 别名 $object 对象
static public function set($alias ,$object)
{
self::$objects[$alias] = $object;
}
//通过别名获取注册树上的某个对象
static public function get($name)
{
return isset(self::$objects[$name]) ? self::$objects[$name] : null;
}
//通过别名删除注册树上的某个对象
static public function _unset($alias)
{
unset(self::$objects[$alias]);
}
}结合注册数模式、单例模式、工厂模式。 修改Factory.php
<?php
namespace Frame;
class Factory
{
static public function createDatabase()
{
//$db = new \Frame\Database(); //单一工厂模式
//$db = Database::getInstance(); //结合单例模式的工厂模式
$db = Register::get('db1'); //结合注册数模式、单例模式、工厂模式
if ($db) {
return $db;
} else {
$db = Database::getInstance();
Register::set('db1', $db);
return $db;
}
}
}index.php中调用
<?php
define('BASEDIR',__DIR__);
include BASEDIR.'/Frame/Loader.php';
spl_autoload_register('\\Frame\\Loader::autoload');
\Frame\Factory::createDatabase();