本文實例講述了PHP設(shè)計模式之單例模式入門與應(yīng)用。分享給大家供大家參考,具體如下:
單例模式,是一種常用的軟件設(shè)計模式,在它的核心結(jié)構(gòu)中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統(tǒng)中一個類只有一個實例,即一個類只有一個對象實例。通俗來講就是通過提供自身共享實例的訪問,單例設(shè)計模式用于限制特定對象只能被創(chuàng)建一次,來看下這個單例模式的要點:
1.一個類只能有一個對象;
2.必須是自行創(chuàng)建這個類的對象;
3,要想整個系統(tǒng)提供這一個對象;
從具體實現(xiàn)的角度來說,可以按著下面這三點來理解:
一是單例模式的類只提供私有的構(gòu)造函數(shù),
二是類定義中含有一個該類的靜態(tài)私有對象,
三是該類提供了一個靜態(tài)的公有的函數(shù)用于創(chuàng)建或獲取它本身的靜態(tài)私有對象。
最主要的就是還要有一個private的clone方法,防止克隆,得記得哈。
優(yōu)點如下:
一、實例控制
單例模式會阻止其他對象實例化其自己的單例對象的副本,從而確保所有對象都訪問唯一實例。
二、靈活性
因為類控制了實例化過程,所以類可以靈活更改實例化過程。
缺點如下:
一、開銷
雖然數(shù)量很少,但如果每次對象請求引用時都要檢查是否存在類的實例,將仍然需要一些開銷。可以通過使用靜態(tài)初始化解決此問題。
二、可能的開發(fā)混淆
使用單例對象(尤其在類庫中定義的對象)時,開發(fā)人員必須記住自己不能使用new關(guān)鍵字實例化對象。因為可能無法訪問庫源代碼,因此應(yīng)用程序開發(fā)人員可能會意外發(fā)現(xiàn)自己無法直接實例化此類。
三、對象生存期
不能解決刪除單個對象的問題。在提供內(nèi)存管理的語言中(例如基于.NET Framework的語言),只有單例類能夠?qū)е聦嵗蝗∠峙洌驗樗瑢υ搶嵗乃接幸谩T谀承┱Z言中(如 C++),其他類可以刪除對象實例,但這樣會導(dǎo)致單例類中出現(xiàn)懸浮引用。
來看下咱寫的案例 :
class Test{
static private $instance;
private $age;
private $name;
private function __construct($name,$age)
{
$this->name = $name;
$this->age = $age;
echo "construct".PHP_EOL;
}
private function __clone()
{
// TODO: Implement __clone() method.
}
static public function set_name($name,$age)
{
if (!self::$instance instanceof self) {
self::$instance = new self($name,$age);
}
return self::$instance;
}
public function get_name()
{
echo $this -> name.PHP_EOL;
echo $this -> age.PHP_EOL;
}
}
$object_1 = Test::set_name("cuijinpeng","26");
$object_1->get_name();
echo "br>";
$object_2 = Test::set_name("luyaran","27");
$object_2->get_name();
運行結(jié)果:
construct cuijinpeng 26
cuijinpeng 26
從上述實例中,我們可以看出,$object_1創(chuàng)建對象后,參數(shù)是"cuijinpeng","26",但是$object_2并沒有創(chuàng)建對象,而是直接使用$instance保存的唯一對象,所以輸出的參數(shù)并沒有變?yōu)?luyaran","27"。
好啦,本次記錄就到這里了。
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運算與運算符用法總結(jié)》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家PHP程序設(shè)計有所幫助。
您可能感興趣的文章:- PHP pthreads v3下worker和pool的使用方法示例
- PHP-FPM 設(shè)置多pool及配置文件重寫操作示例
- PHP設(shè)計模式之建造者模式(Builder)原理與用法案例詳解
- PHP設(shè)計模式之適配器模式(Adapter)原理與用法詳解
- PHP設(shè)計模式之策略模式(Strategy)入門與應(yīng)用案例詳解
- PHP設(shè)計模式之觀察者模式入門與應(yīng)用案例詳解
- php設(shè)計模式之單例模式用法經(jīng)典示例分析
- php設(shè)計模式之觀察者模式定義與用法經(jīng)典示例
- 淺談PHP設(shè)計模式之對象池模式Pool