1.懒汉式
/**
* Created by yaohui on 2016/11/23.
*/
public class Yaohui2 {
private static Yaohui2 mYaohui2;
private Yaohui2() {
}
public static Yaohui2 getmYaohui2() {
if (mYaohui2 == null) {
synchronized (Yaohui2.class) {
if (mYaohui2 == null) {
mYaohui2 = new Yaohui2();
}
}
}
return mYaohui2;
}
}
2.饿汉式
/**
* Created by yaohui on 2016/11/23.
*/
public class Yaohui1 {
private final static Yaohui1 yaohui1 = new Yaohui1();
private Yaohui1() {
}
public static Yaohui1 getYaohui1() {
return yaohui1;
}
}
3.静态类部类单列模式
/**
* Created by yaohui on 2016/11/23.
*/
public class Yaohui {
private Yaohui() {
}
public static Yaohui getYaohui() {
return YaohuiHolder.yaohui;
}
private static class YaohuiHolder {
private final static Yaohui yaohui = new Yaohui();
}
}
4.枚举单列模式
/**
* Created by yaohui on 2016/11/23.
*/
public enum Color {
RED("red color", 0), GREEN("green color", 1),
BLUE("blue color", 2), YELLOW("yellow color", 3);
private String name;
private int id;
Color(String name, int id) {
name = name;
id = id;
}
public String getName() {
return name;
}
public int getId() {
return id;
}
}
几种模式的优缺点:
1.懒汉式的缺点 : 每次获取对象时,都会有一个加锁的操作,影响性能.
2.饿汉式的缺点 : 不管你用不用这个对象,内存都会加载一次这个对象.
由于有这2个缺点的存在,一般都用静态类部类来实现单列模式,既优化了性能,也是线程安全的.但是这种方式也存在问题,就是在反序列化的时候和利用反射也可以创建多个对象出来.
所以枚举单列模式就出来,他成功的避开了上面的缺点.