Java的几种单列模式

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个缺点的存在,一般都用静态类部类来实现单列模式,既优化了性能,也是线程安全的.但是这种方式也存在问题,就是在反序列化的时候和利用反射也可以创建多个对象出来.
所以枚举单列模式就出来,他成功的避开了上面的缺点.

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值