学了这么久,还不知道单例模式,还不过来看看

单例设计模式

什么是单例设计模式

只有一个实例对象 保证对象是唯一的

饿汉式单例

代码:

public class EHan {
//创建之后会存放在永久区中 垃圾回收机制不会回收
    private static final EHan EHAN = new EHan();

    //构造函数
    private EHan() {

    }
    public static EHan getInstance() {
        return EHAN;
    }
   public static void main(String[] args) {
        EHan instance = EHan.getInstance();
        EHan instance1 = EHan.getInstance();
        System.out.println(instance==instance1);
    }
}

饿汉式天生线程安全,在类加载的时候就会创建对象,创建之后会存放在jvm的永久区中,回收机制不会回收,不使用就会浪费内存

懒汉式单例

public class LanHan {
    private static LanHan lanHan;

    private LanHan() {

    }

    public static LanHan getInstance() {
        if (lanHan == null) {
            synchronized (LanHan.class) {
                lanHan = new LanHan();
            }
        }
        return lanHan;
    }
   public static void main(String[] args) {
        LanHan instance = LanHan.getInstance();
        LanHan instance1 = LanHan.getInstance();
        System.out.println(instance == instance1);
    }
}

懒汉式线程不安全,为了保证一个线程进去访问对象,需要加上同步锁,同步锁 影响了程序执行效率
线程安全

枚举方式

public class MeiJu {
 private MeiJu() {

    }

    static enum enumMeiJu {
        Instance;
        private MeiJu meiJu;
        private enumMeiJu() {
            meiJu = new MeiJu();
        }

        public MeiJu getInstance() {
            return this.meiJu;
        }
    }

    public static MeiJu getInstance() {
        return enumMeiJu.Instance.getInstance();
    }

    public static void main(String[] args) {
        MeiJu instance = MeiJu.getInstance();
        MeiJu instance2 = MeiJu.getInstance();
        System.out.println(instance == instance2);
    }
}

1. 枚举天生单例 使用枚举实现单例模式实现简单效率高
2. 可以防止反射获取单例对象 会报错
3. 当一个类定义一个枚举的时候 编译之后会默认继承java.lang.Enum 该类上面会加上final 不能被继承

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值