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

1、什麼是單例設計模式

單例模式,也叫單子模式,是一種經常使用的軟件設計模式。在應用這個模式時,單例對象的類必須保證只有一個實例存在。php

2、單例模式的技巧

  1. 利用$_instance私有變量來保存類的惟一實例化對象;
  2. 設計一個getInstance對外公開的函數,能夠獲取類惟一實例;
  3. 防止用戶用new實例化,和克隆,構造兩個__construct、__clone私有函數;

3、單例模式的應用場景

  數據庫設計,咱們發送一次請求,可能會須要訪問不一樣的表,那麼若是每次訪問都 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();
輸出結果:

這是一個新對象數據庫

這個是一箇舊的對象segmentfault

這個是一箇舊的對象設計模式

「對象」?,程序員怎麼可能有對象!~數據庫設計

參考

系列源地址

WilburXu/design_pattern函數

系列目錄

  1. PHP 設計模式概述
  2. PHP設計模式(一)簡單工廠模式 (Simple Factory For PHP)
  3. PHP設計模式(二)工廠方法模式(Factory Method)
  4. PHP設計模式(三)抽象工廠模式(Abstract Factory)
  5. PHP設計模式(四)單例模式(Singleton)
相關文章
相關標籤/搜索