設計模式 單例模式

2021-09-12 13:28:30 字數 1555 閱讀 2780

單例模式是一種建立型模式。

單例模式有幾個要點:

1)必須確保只存在乙個類的例項。

2)類必須自己建立自己,不允許其他類來建立自己。

3)必須提供乙個方法允許其他類訪問單例成員。

由此可知:構造方法必須是私有的,然後需要乙個公有的靜態方法獲取單例例項 。

1、懶漢式

//懶漢式單例類.在第一次呼叫的時候例項化自己   

public class singleton

private static singleton single=null;

//靜態工廠方法

public static singleton getinstance()

return single;

} }

單例例項在第一次呼叫的時候才建立,符合懶載入的要求。缺點是:不支援多執行緒,在多執行緒環境下可能會建立多個物件。

改進方式:

1)在getinstance方法上加同步

public static synchronized singleton getinstance()     

return single;

}

這種實現方式簡單,但效能上有缺陷,由於直接在方法上加了鎖,所以如果同時有兩個地方獲取單例物件,其中乙個就會阻塞。在獲取單例的次數獲取比較多的時候效能很差。

2)雙重檢查鎖定

public static singleton getinstance()     

}

}

return singleton;

}

這種方式比較複雜,但是其他方面都很好:既實現了懶載入,同時也是執行緒安全的,效能還不錯。

3)靜態內部類

public class singleton     

private singleton (){}

public static final singleton getinstance()

}

這種方式和雙檢鎖方式的效果類似,既可以保證懶載入又具有多執行緒下的效能優勢。而且實現起來更加簡單。

2、餓漢式

//餓漢式單例類.在類初始化時,已經自行例項化   

public class singleton1

private static final singleton1 single = new singleton1();

//靜態工廠方法

public static singleton1 getinstance()

}

在第一次載入類的時候,會初始化類的靜態域,並確保靜態域只初始化一次,缺點是載入類的時候就建立了單例物件,沒有懶載入。

3、列舉方式

public enum enumsingleton 

public string getdata()

}

設計模式 單例模式

單例模式 singleton pattern 是乙個比較簡單的模式,其定義如下 ensure a class has only one instance,and provide a golbal point of acess to it.確保某乙個類只有乙個例項,而且自行例項化並且向整個系統提供這個...

設計模式 單例模式

class testsingleton static public function instance return self testsingleton private function clone public function setsinvar sinvar public function ...

設計模式 單例模式

單例模式的目的是保證類在系統中只被例項化一次,由該唯一的例項來為系統提供服務.單例模式主要用於保證服務的統一,比如獲取統一的編號服務,模仿oracle的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...