PHP設計模式_單例模式

OldBoy~發表於2018-01-31

瞭解

單例設計模式用於限制特定物件只能被例項化建立一次,有且只有一個此型別的資源。例如,通過資料庫控制程式碼到資料庫的連線是獨佔的。您希望在應用程式中共享資料庫控制程式碼,因為在保持連線開啟或關閉時,它是一種開銷,在獲取單個頁面的過程中更是如此。單例模式可以減少類的例項化,避免大量的new操作。因為每一次new操作都會消耗系統和記憶體的資源。

特點

  • 只能有一個例項。
  • 必須自行建立這個例項。
  • 必須給其他物件提供這一例項。

程式碼

<?php
//典型的Mysql操作類
class mysql_db{  
  //1.私有的靜態屬性
  private static $dbcon = false;  
  //2.私有的構造方法
  private function __construct(){
    $dbconn = @mysql_connect("localhost","root","");
    mysql_select_db("test",$dbconn) or die("mysql_connect error");
    mysql_query("SET NAMES utf8");
  }  
  //3.私有的克隆方法
  private function __clone() {
  
  }  
  //1.公有的靜態方法
  public static function getIntance() { 
    if(self::$dbcon==false){    
      self::$dbcon=new self;
    } 
    return self::$dbcon;
  } 
}
$db = mysql_db::getIntance();

 補充說明

  • $_instance必須宣告為靜態的私有變數
  • 建構函式和解構函式必須宣告為私有,防止外部程式new 類從而失去單例模式的意義
  • getInstance()方法必須設定為公有的,必須呼叫此方法 以返回例項的一個引用
  • ::操作符只能訪問靜態變數和靜態函式
  • new物件都會消耗記憶體
  • 使用場景:最常用的地方是資料庫連線。
  • 使用單例模式生成一個物件後, 該物件可以被其它眾多物件所使用。
  • 私有的__clone()方法防止克隆物件

相關文章