深入理解23种设计模式(1) -- 单例模式

介绍

  • 保证一个类只有一个实例,并且提供一个访问该全局访问点

单例创建方式

1.饿汉式:类初始化时,会立即加载该对象,线程天生安全,调用效率高。
2.懒汉式: 类初始化时,不会初始化该对象,真正需要使用的时候才会创建该对象,具备懒加载功能。
3.静态内部方式:结合了懒汉式和饿汉式各自的优点,真正需要对象的时候才会加载,加载类是线程安全的。
4.枚举单例: 使用枚举实现单例模式 优点:实现简单、调用效率高,枚举本身就是单例,由jvm从根本上提供保障!避免通过反射和反序列化的漏洞, 缺点没有延迟加载。

1.饿汉式实现

在这里插入图片描述

2.懒汉式实现

在这里插入图片描述

3.枚举创建单例

枚举–定义常量,天生具备JVM保障单例,一般项目定义常量

package com.dimple.Design;

public class SinEnum {

    private SinEnum(){

    }

    public static SinEnum getInstance() {
        return sinEnumPattern.INSTANCE.getInstance();
    }

    private static enum sinEnumPattern {
        INSTANCE;
        // 枚举元素为单例
        private SinEnum sinEnum;

        private sinEnumPattern() {
            sinEnum = new SinEnum();
        }

        public SinEnum getInstance() {
            return sinEnum;
        }
    }

    public static void main(String[] args) {
        SinEnum u1 = SinEnum.getInstance();
        SinEnum u2 = SinEnum.getInstance();
        System.out.println(u1 == u2);
    }
}

在这里插入图片描述

如何选择单例创建方式

– 如果不需要延迟加载单例,可以使用枚举或者饿汉式,相对来说枚举性好于饿汉式。

– 如果需要延迟加载,可以使用静态内部类或者懒韩式,相对来说静态内部类好于懒汉式。

优点和缺点

优点:

1)节约内存,只有一个实例,重复利用,方便管理

缺点:

 1)线程安全问题

适用场景:

 1) Windows的Task Manager(任务管理器)就是很典型的单例模式
 2) 数据库连接池,线程池,spring(默认单例模式)都是单例


github Demo地址 : ~~~传送门~~~

个人博客地址:http://blog.yanxiaolong.cn/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值