1. 程式人生 > >1 單例設計模式

1 單例設計模式

存在 特點 成員 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 {
    //設立靜態變量,直接創建實例
    private
static Single2 Single = new Single2(); private Singlet2(){ //私有化構造函數 } //開放一個公有方法,返回實例 public static Single2 getInstance(){ return Single; } }

1 單例設計模式