1 單例設計模式
阿新 • • 發佈:2019-03-16
存在 特點 成員 bsp 設立 私有 定義 禁止 單例設計模式
單例模式是指整個應用中類只有一個對象實例的設計模式。
使用一個私有構造函數、一個私有靜態變量以及一個公有靜態函數來實現。
私有構造函數保證了不能通過構造函數來創建對象實例,只能通過公有靜態函數返回唯一的私有靜態變量。
每次用 new 類名 的方式,就可以創建一個對象。我們必須禁止外部程序用 new 類名的方式來創建多個實例。
解決辦法是:我們將構造函數設置成 private ,讓構造函數只能在內部被調用,而外部不能調用。這樣,這個類就不能被外部用 new 的方式建立多個實例了。
經典的設計模式主要有2種:懶漢式和餓漢式。下面分別展示代碼。
懶漢式:
懶漢式單例模式既在需要的時候才創建單例對象,即“用時間換空間”。
//懶漢式 class Single { static private $instance = null;//聲明一個靜態變量(保存在類中唯一的一個實例) private function __construct(){//聲明私有構造方法為了防止外部代碼使用new來創建對象。 } static public function getInstance(){//聲明一個getInstance()靜態方法,用於檢測是否有實例對象 if(self::$instance == null) { self::$instance= new self(); } return self::$instance; } } $instance = Single::getInstance();//得到實例
餓漢式:
餓漢式的特點是一開始就創建實例,即“用空間換時間”
php有一個特性,不支持在類定義時給類的成員變量賦予非基本類型的值。如表達式,new操作等等。故我目前還無法實現php的餓漢式單例。下面用Java實現一下:
//餓漢式單例模式 public class Single2 { //設立靜態變量,直接創建實例 privatestatic Single2 Single = new Single2(); private Singlet2(){ //私有化構造函數 } //開放一個公有方法,返回實例 public static Single2 getInstance(){ return Single; } }
1 單例設計模式