單例模式(Singleton pattern)是常用的軟體設計模式。在它的核心結構中只包含一個被稱為單例類別的特殊類別。透過單例模式可以確保系統中一個類別只有一個實例而且該實例易於外界訪問,從而方便對實例個數的控制並節約系統資源。如果希望在系統中某個類別的物件只能存在一個,單例模式是最好的解決方案。
如何保證一個類別只有一個實例並且這個實例容易被存取呢?定義一個全域變數可以確保物件隨時都可以被訪問,但不能防止我們實例化多個物件。一個更好的解決辦法是讓類別本身負責保存它的唯一實例。這個類別可以保證沒有其他實例被創建,並且它可以提供一個訪問該實例的方法。這就是單例模式的模式動機。
例如我們在php的開發過程中我們建立了一個db類別(資料庫操作類別),那麼我們希望再一個php檔案中一個資料庫只被連接一次而一個php檔案中也只需要一個資料庫對象!因為多次連接資料庫會大幅降低php的執行效率。也會帶來極大的系統開銷!
使用單例模式來封裝你的資料庫吧
<?php class db { //使用一个静态变量记录db对象初始化时为null public static $db = null; /* 私有构造函数是类无法完成外部的调用 * 意味着您将无法使用 $xx = new db(); */ private function __construct(){ echo '连接数据库....'; } /* * 使用静态方法去获取数据对象 * 获取时先判断db对象是否已经存在,如果存在则直接返回db对象反正则创建这个对象 */ public static function getInstance(){ if(self::$db == null){ self::$db = new db(); } return self::$db; } public function query($sql){ echo '执行sql命令'; } public function __destruct(){ echo '关闭数据库连接....'; } } $db = db::getInstance(); $db1 = db::getInstance(); $db->query('test'); $db2 = db::getInstance(); //输出 : 连接数据库....执行sql命令关闭数据库连接....
//可以看到不論我們取得多少次db對象,雖然他們名稱不同,但都代表著同一個物件!這樣就實作單例模式!
以上是什麼是單例模式?的詳細內容。更多資訊請關注PHP中文網其他相關文章!