创建型模式(五):Singleton(单例模式)
生活随笔
收集整理的這篇文章主要介紹了
创建型模式(五):Singleton(单例模式)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
單例模式確保某一個類只有一個實例,而且自行實例化并向整個系統提供這個實例單例模式。單例模式只應在有真正的“單一實例”的需求時才可使用。
1 class Singleton {2 private static Singleton sing;
3
4 private Singleton() {
5 }
6
7 public static Singleton getInstance() {
8 if (sing == null) {
9 sing = new Singleton();
10 }
11 return sing;
12 }
13 }
14
15 public class Test {
16 public static void main(String[] args) {
17 Singleton sing = Singleton.getInstance();
18 Singleton sing2 = Singleton.getInstance();
19 System.out.println(sing);
20 System.out.println(sing2);
21 }
22 }
不過這樣的單例模式似乎有些問題,在多線程并發的情況下,if(sing=null)的判斷上還是有可能出現兩個單例的情況,所以為避免萬一,最好還是改成:
1 class Singleton{2 private Singleton(){}
3 private static Singleton sing=new Singleton();
4 public static Singleton getInstance(){
5 return sing;
6 }
7 }
還有更牛X的方法進行單例~
使用枚舉:
enum Singleton{sing;
//方法
public void test(){
System.out.println("singleton");
}
}
因為枚舉默認每個都是單例
?
以為結束了嗎?不~使用靜態內部類:
class Singleton{private static class SingletonInner{
private static Singleton sing=new Singleton();
}
private Singleton(){}
public static Singleton getInstance(){
return SingletonInner.sing;
}
}
這樣用的好處在于可以在類在裝載的時候并沒有創建這個單例,而在真正使用的時候才去調用內部類去創建這個單例
轉載于:https://www.cnblogs.com/lich/archive/2011/12/07/2279929.html
總結
以上是生活随笔為你收集整理的创建型模式(五):Singleton(单例模式)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Sim300设计手册(转)
- 下一篇: A == B?