PHP設計模式(四)單例模式(Singleton)

WilburXu發表於2019-02-16

一、什麼是單例設計模式

單例模式,也叫單子模式,是一種常用的軟體設計模式。在應用這個模式時,單例物件的類必須保證只有一個例項存在。

二、單例模式的技巧

  1. 利用$_instance私有變數來儲存類的唯一例項化物件;
  2. 設計一個getInstance對外公開的函式,可以獲取類唯一例項;
  3. 防止使用者用new例項化,和克隆,構造兩個__construct、__clone私有函式;

三、單例模式的應用場景

  資料庫設計,我們傳送一次請求,可能會需要訪問不同的表,那麼如果每次訪問都 new 一個例項,那必然會造成資源的浪費,所以使用單例模式,可以很好的節省資源。

單例類
class DataBase
{
    /**
     * 靜態成品變數,儲存全域性例項
     */
    private static $_instance = null;

    /**
     *  測試變數,儲存日誌資訊
     */
    private static $_msg = null;

    /**
     * 私有構造方法,防止外界例項化物件
     */
    private function __construct()
    {
        $connect = "連線資料庫操作";
    }

    /**
     * 私有化克隆方法,防止外來鍵克隆物件
     */
    private function __clone()
    {
    }

    /**
     * 靜態方法,外界獲取例項的唯一介面
     * @return Object 返回物件唯一例項
     */
    public static function getInstance()
    {
        if (!self::$_instance){
            self::$_instance = new DataBase();
            self::$_msg = "這是一個新物件" . "<br>";
        }else{
            self::$_msg = "這個是一箇舊的物件" . "<br>";
        }

        return self::$_instance;
    }

    public function log()
    {
        echo self::$_msg;
    }
}
客戶端測試程式碼
    $dbA = DataBase::getInstance();
    $dbA->log();

    $dbB = DataBase::getInstance();
    $dbB->log();

    $dbC = DataBase::getInstance();
    $dbC->log();
輸出結果:

這是一個新物件

這個是一箇舊的物件

這個是一箇舊的物件

“物件”?,程式設計師怎麼可能有物件!~

參考

系列源地址

WilburXu/design_pattern

系列目錄

  1. PHP 設計模式概述
  2. PHP設計模式(一)簡單工廠模式 (Simple Factory For PHP)
  3. PHP設計模式(二)工廠方法模式(Factory Method)
  4. PHP設計模式(三)抽象工廠模式(Abstract Factory)
  5. PHP設計模式(四)單例模式(Singleton)

相關文章