设计模式-单例模式

定义:确保某一个类只有一个实例,而且自行实例化并向整个系统提供整个实例。
使用场景:确保某个类有且只有一个对象的场景,避免产生多个对象消耗过多的资源,或者某种类型的对象应该有且只有一个。

懒汉式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Singleton {

private static Singleton sInstance = null;

private Singleton(){
}

public void init(){}

public static synchronized Singleton getInstance(){
if (sInstance == null){
sInstance = new Singleton();
}
return sInstance;
}
}

饿汉式

1
2
3
4
5
6
7
8
9
public class Singleton {

private final static Singleton INSTANCE = new Singleton();

private Singleton(){}

public static Singleton getInstance(){
return INSTANCE;
}

DCL(Double Check Lock)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Singleton {

private static volatile Singleton mInstance = null;

private Singleton(){}

public void init(){}

public static Singleton getInstance(){
if (mInstance==null){
synchronized (Singleton.class){
if (mInstance == null){
mInstance = new Singleton();
}
}
}
return mInstance;
}
}

静态内部类单例模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Singleton {

private Singleton(){
}

public void init(){}

public static Singleton getInstance(){
return SingletonHolder.sInstance;
}

private static class SingletonHolder{
private static final Singleton sInstance = new Singleton();
}
}

枚举单例

1
2
3
4
public enum Singleton {
INSTANCE;
public void init(){}
}