首页 > 其他分享 >单例各种实现代码

单例各种实现代码

时间:2023-02-12 21:12:22浏览次数:37  
标签:实现 代码 private class instance static 单例 public

单例各种实现代码

1. 懒汉式单例实现

```java
/**
 * 懒汉式单例
 */
public class LazySingleton {
    private static LazySingleton instance;

    private LazySingleton() {
    }

    public static LazySingleton getInstance() {
        if (instance == null) {
            instance = new LazySingleton();
        }
        return instance;
    }
}
```

2. 饿汉式单例实现

```java
/**
 * 饿汉式单例
 */
public class HungrySingleton {
    private static HungrySingleton instance = new HungrySingleton();

    private HungrySingleton() {
    }

    public static HungrySingleton getInstance() {
        return instance;
    }
}
```

3. 双重检查锁定实现

```java
/**
 * 双重检查锁定实现
 */
public class DoubleCheckLockSingleton {
    private volatile static DoubleCheckLockSingleton instance;

    private DoubleCheckLockSingleton() {
    }

    public static DoubleCheckLockSingleton getInstance() {
        if (instance == null) {
            synchronized (DoubleCheckLockSingleton.class) {
                if (instance == null) {
                    instance = new DoubleCheckLockSingleton();
                }
            }
        }
        return instance;
    }
}
```

4. 静态内部类实现

```java
/**
 * 静态内部类实现
 */
public class InnerClassSingleton {
    private InnerClassSingleton() {
    }

    private static class SingletonHolder {
        private static InnerClassSingleton instance = new InnerClassSingleton();
    }

    public static InnerClassSingleton getInstance() {
        return SingletonHolder.instance;
    }
}
```

5. 枚举类单例实现

```java
/**
 * 枚举类单例实现
 */
public enum EnumSingleton {
    INSTANCE;

    public void doSomething() {
        // do something
    }
}
```

6. 容器单例实现

```java
/**
 * 容器单例实现
 */
public class ContainerSingleton {
    private static Map<String, Object> container = new ConcurrentHashMap<String, Object>();

    private ContainerSingleton() {
    }

    public static Object getInstance(String className) {
        Object instance = null;
        if (!container.containsKey(className)) {
            try {
                instance = Class.forName(className).getDeclaredConstructor().newInstance();
                container.put(className, instance);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return instance;
        } else {
            return container.get(className);
        }
    }
}
```

 

标签:实现,代码,private,class,instance,static,单例,public
From: https://www.cnblogs.com/deepalley/p/17114718.html

相关文章

  • day07-SpringMVC底层机制简单实现-03
    SpringMVC底层机制简单实现-03https://github.com/liyuelian/springmvc-demo.git7.任务6-完成控制器方法获取参数-@RequestParam功能说明:自定义@RequestParam注解和......
  • 用注解实现AOP
    一、@Aspect:切面类@Before:前置@Around:环绕@AfterRetuming:后置@AfterThrowing:异常@After:最终@Pointcut:连接点,标注在一个无返、无参、二、加载<context:component-scanbase-p......
  • 1行Python代码去除图片水印,网友:一干二净!
    大家好,这里是程序员晚枫。最近小明在开淘宝店(店名:爱吃火锅的小明),需要给自己的原创图片加水印,于是我上次给她开发了增加水印的功能:图片加水印,保护原创图片,一行Python代码搞......
  • 7.4FreeBSD Port帮你轻松使用源代码
       Unix系列操作系统FreeBSD中,存在一种名为Ports的机制。该机制能够结合当前运行的硬件环境来编译应用的源代码,进而得到可以运行的本地代码系统。如果目标应用的源代......
  • 死锁代码
    publicclassDeadLockDemo{privatestaticObjectresource1=newObject();//资源1privatestaticObjectresource2=newObject();//资源2......
  • unity 实现自定义class深度拷贝 deep copy 深度复制 引用类型复制
    气死我了,搜半天没有,全让序列化再反序列化,又不方便又不美观。结果自己试着一写就通,两行完事。首先先安装Newtonsoft.Json包,这个很常用也很简单,随便搜一下安上就行,早晚得学......
  • K8s:通过 kubectl 插件 Kubepug 实现集群升级检查(废弃API资源检查)
    写在前面分享一个小工具,可用于版本升级的废弃API对象检查博文内容涉及:kubepug离线安装,配置kubectl插件kubepug两种方式离线使用Demo理解不足小伙伴帮忙......
  • SpringBoot 时间格式化的 5 种实现方法!
    在我们日常工作中,时间格式化是一件经常遇到的事儿,所以本文我们就来盘点一下SpringBoot中时间格式化的几种方法。时间问题演示为了方便演示,我写了一个简单SpringBoot......
  • 代码块的使用细节
    介绍代码块的基本使用,对类的加载时机,及子类对象实例化过程中,静态/普通属性初始化、静态/普通代码块、构造方法的执行顺序的分析。Author:MsuenbDate:2023-02-11代......
  • SpringBoot+ElasticSearch 实现模糊查询,批量CRUD,排序,分页,高亮!
    一、导入elasticsearch依赖在pom.xml里加入如下依赖<dependency>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starte......