时间:2021-07-01 10:21:17 帮助过:23人阅读
工厂模式,工厂方法或者类产生对象,百不是在代码中直接new
单例模式,使某个类的对象仅允许创建一个
注册模式,全局共享和交换对象
工厂模式factory.php
<?php
class Database{
public function __construct()
{
return "Database\n";
}
}
//工厂类
class Factory{
public static function createDatabase()
{
$db = new Database();
return $db;
}
}
$db = Factory::createDatabase();
$db1 = Factory::createDatabase();
$db2 = Factory::createDatabase();
var_dump($db, $db1, $db2);
#object(Database)#1 (0) {
#}
#object(Database)#2 (0) {
#}
#object(Database)#3 (0) {
#}单例模式singleton.php
<?php
//单例模式
class Database{
protected static $db;
//构造方法私有,防止在外层直接new
private function __construct(){
//code
}
static function getInstance(){
if (self::$db) {
return self::$db;
}else{
self::$db = new self();
return self::$db;
}
}
}
$db = Database::getInstance();
$db1 = Database::getInstance();
$db2 = Database::getInstance();
var_dump($db, $db1, $db2);
#object(Database)#1 (0) {
#}
#object(Database)#1 (0) {
#}
#object(Database)#1 (0) {
#}工厂模式和单例结合使用
<?php
class Database{
protected static $db;
private function __construct(){
}
static function getInstance(){
if (self::$db) {
return self::$db;
}else{
self::$db = new self();
return self::$db;
}
}
}
class Factory{
public static function createDatabase(){
return Database::getInstance();
}
}
var_dump(Factory::createDatabase());注册器类register.php
<?php
//注册器模式
class Register
{
protected static $objects;
static function set($alias, $object){
self::$objects[$alias] = $object;
}
static function get($name){
return self::$objects[$name];
}
function _unset($alias){
unset(self::$objects[$alias]);
}
}
Register::set('db1', $db);
Register::get('db1');更多PHP设计模式之工厂模式、单例模式和注册模式相关文章请关注PHP中文网!