1.單例模式的由來
類別
是對現實生活中一類具有共同特徵的事物的抽象,透過類別的實例化,產生了許多的對象,但同時也產生了大量資源的消耗(例如在連接資料庫
時連接數量的限制,又例如在電腦中開啟資源管理器
卻具有唯一性),由此也產生了對類別的實例化進行了限定的需求,為了保護資源的唯一性,由此產生了單例模式
。
2.單例模式的定義
定義:單例模式singleton,是一種類別的設計只會產生最多一個物件的設計想法。
3.單例模式的實例
a.建立一個空類別 。
#<?php class Use{ } $a=new Use();//实例化一个对象 ?>
b. 我們中使用多重執行方法時的結構所建立的原因一樣,所以可透過私人化方法##。 <pre class="brush:php;toolbar:false"><?php
class Use{
private function __construct()
{
echo __FUNCTION__."<br>";
}
}
?></pre>
c.私有化
使得實例化物件產生的數目為0,由此可以透過在類別的內部,透過靜態方法
呼叫建構方法,然後將構造方法傳回外部。 <pre class="brush:php;toolbar:false"><?php
class Use{
private function __construct()
{
echo __FUNCTION__."<br>";
}
public static function getInstance()
{
return new self();
}
}
$s1=Use::getSingleton();
?></pre>
d.雖然能夠透過上述的方法實例化對象,但是同時也將建構方法的使用權限外放出去。如果想要該方法只回傳一個對象,就得確保類別內部有辦法存著某個產生的對象,第一次產生新的,後面回傳舊的。此時需要使用靜態屬性。
<?php class Use{ private static $object = NULL;//初始化为NULL,没有对象 private function __construct() { echo __FUNCTION__."<br>"; } public static function getInstance() { //判断类内部的静态属性是否存在对象 if(!(self::$object instanceof self)){ //当前保存的内容不是当前类的对象 self::$object = new self(); } //返回对象给外部 return self::$object; } } $s1=Use::getSingleton(); ?>
e.此時可以保證,透過呼叫
靜態方法只得到一個物件
。但是依舊可以透過克隆
,不停的實例化新的對象,所以可以將克隆
#私有化。 <pre class="brush:php;toolbar:false"><?php
class Use{
private static $object = NULL;//初始化为NULL,没有对象
private function __construct()
{
echo __FUNCTION__."<br>";
}
public static function getInstance()
{
//判断类内部的静态属性是否存在对象
if(!(self::$object instanceof self)){ //当前保存的内容不是当前类的对象
self::$object = new self();
}
//返回对象给外部
return self::$object;
}
private function __clone(){}
}
$s1=Use::getSingleton();
?></pre>
以上是php中的單例模式的詳細內容。更多資訊請關注PHP中文網其他相關文章!