單例模式解決的是如何在整個(gè)項(xiàng)目中創(chuàng)建唯一對(duì)象實(shí)例的問(wèn)題雷袋,工廠(chǎng)模式解決的是如何不通過(guò)new建立實(shí)例對(duì)象的方法矿瘦。
單例模式可以換成數(shù)據(jù)庫(kù)類(lèi),數(shù)據(jù)庫(kù)類(lèi)再擴(kuò)展做成 “適配器模式”
<?php
//創(chuàng)建單例
class Single{
public $hash;
static protected $ins=null;
final protected function __construct(){
$this->hash=rand(1,9999);
}
static public function getInstance(){
if (self::$ins instanceof self) {
return self::$ins;
}
self::$ins=new self();
return self::$ins;
}
}
//工廠(chǎng)模式
class RandFactory{
public static function factory(){
return Single::getInstance();
}
}
//注冊(cè)樹(shù)
class Register{
protected static $objects;
public static function set($alias,$object){
self::$objects[$alias]=$object;
}
public static function get($alias){
return self::$objects[$alias];
}
public static function _unset($alias){
unset(self::$objects[$alias]);
}
}
Register::set('rand',RandFactory::factory());
$object=Register::get('rand');
print_r($object);