工厂模式
工厂方法或类生成对象,而不是在代码中直接new
工厂方法的好处是统一生成对象,当以后生成对象变更时,只需要更改工厂类的方法即可
//Database.php 数据库类
<?php
namespace App;
class Database
{
}
//Factory.php 工厂类
<?php
namespace App;
class Factory
{
static function createDatabase()
{
$db = new Database();
return $bd;
}
}
//index.php 调用示例
<?php
$db = \App\Factory::createDatabase();
单例模式
使某个类的对象仅允许被创建一次
//Database.php 单例数据库类
<?php
namespace App;
class Database
{
protected $db;
//禁止直接new对象
private function __construct()
{
}
static function getInstance()
{
if ($db) {
return self::$db;
}
$db = new self();
return $db;
}
}
//index.php 调用示例
<?php
$db = \App\Database::getInstance();
注册模式
全局共享和交换对象
//Register.php 注册类
<?php
namespace App;
class Register
{
protected static $objects;
static set($alias, $object)
{
self::$objects[$alias] = $object;
}
static get($alias)
{
return self::$objects[$alias];
}
//unset为系统关键字
static _unset($alias)
{
unset(self::$objects[$alias]);
}
}
//index.php 调用示例
<?php
$db = \App\Database::getInstance();
\App\Register::set('db', $db);
$db = \App\Register::get('db');
以上三种是基本的设计模式,在使用过程中一般会结合其它设计模式使用。
简单示例:
//Factory.php 工厂类
<?php
namespace App;
class Factory
{
static function createDatabase()
{
$db = Database::getInstance();
return $bd;
}
}
//index.php 调用示例,结合了单例、工厂和注册模式
<?php
$db = \App\Factory::createDatabase();
\App\Register::set('db', $db);
$db = \App\Register::get('db');