|
基于Singleton的特性,我們經(jīng)常用Singleton配置應(yīng)用程序并定義應(yīng)用程序中可能隨時(shí)訪問的變量。但有時(shí)并不推薦使用Singleton,因?yàn)樗闪艘粋€(gè)全局狀態(tài)且
該單一根對(duì)象沒有封裝任何系統(tǒng)功能。多數(shù)情況下,會(huì)使單元測試和調(diào)試變得困難。讀者根據(jù)情況自行決定。
代碼示例:
復(fù)制代碼 代碼如下:
<?php
class SingletonExample{
private function __construct(){}//防止直接實(shí)例化
public static function getInstance(){ //不與任何對(duì)象有關(guān)聯(lián)
static $instance=null; //調(diào)用此函數(shù)的所有代碼共享該變量,不必要讓其是類的靜態(tài)變量
if($instance==null){
$instance=new SingletonExample();
}
return $instance;
}
}
$obj1=SingletonExample::getInstance();
$obj2=SingletonExample::getInstance();
var_dump($obj1===$obj2);// true 是同一個(gè)實(shí)例
?>
Multiton與singleton相似,不同的是后者需要getInstance()函數(shù)傳遞關(guān)鍵值。
對(duì)于給定的關(guān)鍵值只會(huì)存在唯一的對(duì)象實(shí)例,如果有多個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)擁有唯一的表識(shí)符,且各個(gè)節(jié)點(diǎn)在某單次執(zhí)行(如cms里的節(jié)點(diǎn))可能出現(xiàn)多次,那么就可以用Multiton模式實(shí)現(xiàn)這些節(jié)點(diǎn)啊,Multiton節(jié)省內(nèi)存,并確保同一個(gè)對(duì)象的多個(gè)實(shí)例不發(fā)生沖突.
示例:
復(fù)制代碼 代碼如下:
<?php
class MultitonExample{
private function __construct(){}//防止直接實(shí)例化
public static function getInstance($key){
static $instance=array();
if(!array_key_exists($key,$instance)){
$instance[$key]=new SingletonExample();
}
return $instance($key);
}
};
?>
php技術(shù):php設(shè)計(jì)模式之單例、多例設(shè)計(jì)模式的應(yīng)用分析,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。