簡述設計模式--單例模式

單例模式是軟件設計模式中最簡單,使用頻次最高的設計模式之一。

其目的是:

確保某一個類在系統中只有一個實例(對象)。

應用場景:

  1. PHP主要的是與數據庫進行交互,需要大量的使用數據庫操作類,使用單例模式可以避免大量的new 數據庫類消耗系統資源。
  1. 某些應用中需要用一個類來加載配置信息,使用單例模式就會非常方便。
  2. 在一次頁面請求中,便于進行調試, 因為所有的代碼(例如數據庫操作類db)都集中在一個類中, 我們可以在類中設置鉤子, 輸出日志,從而避免到處var_dump, echo。

代碼實現

一般情況下的數據庫操作類:
Database.php
<?php
class Database{
  //數據庫連接操作
}
?>

index.php
<?php
class Index{
  $db = new Database();      //new出我們需要的數據庫連接實例
}
?>

使用這種方式進行數據庫連接,在每一個文件中都需要去new一個數據庫實例,而實際中我們只需連接一次就可以了。所以這種方式造成了不必要的資源浪費。

使用單例模式
Database.php
<?php
class Database{ 
    protect $db;   
    //定義一個私有的構造方法
    private __construct(){
          
   }
   static public dataCo(){
      if(self::$db){
            return self::$db;
      }
      self::$db = new self();
      return self::$db
  }
}
?>

index.php
<?
php
class Index{ 
  $db = Database::dataCon();
}
?>

使用單例模式創建的數據庫連接類,無論你在其他文件中實例多少個數據庫連接實例,其實都是一個。

PHP創建工廠模式的步驟:

1.定義一個私有的構造方法。(使類在其他文件中不能通過New來實例化)

 private __construct(){ }

2.定義靜態方法來實例化本身(在內部進行判斷,如實例已經存在直接返 回,如不存在則new出本身并返回)

static public dataCo(){ 
  if(self::$db){ 
  return self::$db; 
  } 
  self::$db = new self(); 
  return self::$db 
}

3.通過靜態方法實例化

$db = Database::dataCon();

其實在一般使用時為了防止對象被克隆還會添加一個__clone 方法。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,915評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,242評論 25 708
  • 單例模式(SingletonPattern)一般被認為是最簡單、最易理解的設計模式,也因為它的簡潔易懂,是項目中最...
    成熱了閱讀 4,292評論 4 34
  • 眼淚, 打破水面的頃刻, 世界如同黑白膠帶的電影, 戛然斷裂, 靜音下的世界, 一如晗罹里那個消失了光,聲音,呼吸...
    清明檀邪閱讀 197評論 0 1
  • 不知道標題寫啥..直接上錯誤好了 今天在Pods里想使用下傳說中的Facebook的FBMemoryProfile...
    冰冰大象閱讀 222評論 0 1