設計模式(三)單例模式

單例模式

單例模式確保某個類只有一個實例,並且自行實例化並向整個系統提供這個實例。php

單例模式是一種常見的設計模式,在計算機系統中,線程池、緩存、日誌對象、對話框、打印機、數據庫操做、顯卡的驅動程序常被設計成單例。數據庫

單例模式分3種:懶漢式單例、餓漢式單例、登記式單例。設計模式

單例模式有如下3個特色:緩存

1.只能有一個實例。this

2.必須自行建立這個實例。spa

3.必須給其餘對象提供這一實例。線程

那麼爲何要使用PHP單例模式?設計

PHP一個主要應用場合就是應用程序與數據庫打交道的場景,在一個應用中會存在大量的數據庫操做,針對數據庫句柄鏈接數據庫的行爲,使用單例模式能夠避免大量的new操做。由於每一次new操做都會消耗系統和內存的資源。日誌

<?php
//單例模式,是一種經常使用的軟件設計模式。在它的核心結構中只包含一個被稱爲單例的特殊類。
//經過單例模式能夠保證系統中一個類只有一個實例。即一個類只有一個對象實例。
class Page
{
    private $total = 10; //聲明私有屬性
    private static $page; //聲明類惟一實例(靜態變量)
    //static private  $page; //等同 聲明類惟一實例(靜態變量)
    ////聲明私有構造方法爲了防止外部代碼使用new來建立對象。
    private function __construct($total)
    {
        echo "====加載私有構造方法====<br>";
        $this->total = $total;
    }
    //聲明靜態類內部惟一獲取實例的方法
    static public function getPage($p){
        echo "====獲取類實例單例====<br>";
        if(!self::$page) self::$page = new self($p);
        return self::$page;
    }
    public function getTotal()
    {
        return $this->total;
    }    
}
//獲取單例實例
$one = Page::getPage(123); 
 
//獲取單例實例
$two = Page::getPage(456);
 
echo $one->getTotal(); //輸出:123
echo $two->getTotal(); //輸出:123 不會輸出456
?>
相關文章
相關標籤/搜索