单例模式java

1 单例模式

单例模式是指在内存中只会创建且仅创建一次对象的设计模式。
懒加载: 用到才创建
饥饿加载: 初始化就创建

jdk中的单列: Runtime()

2. 饿汉式-成员变量

/**
 * 饥饿式: 静态成员变量的方式
 * */
public class singleMod {
    // 私有成员方法
    private singleMod(){}
    
    // 在本类中创建本类的对象
    private static singleMod sing = new singleMod();
    
    public static singleMod getSingle(){
        return sing;
    }
}

3. 饿汉式-静态代码块

/**
 * 饿汉式: 静态代码块的方式
 * */
public class singleMod2 {
    // 私有成员方法
    private singleMod2(){}

    // 在本类中创建本类的对象
    private static singleMod2 sing;
    static {
        sing = new singleMod2();
    }
    public static singleMod2 getSingle(){
        return sing;
    }
}

4. 懒汉式

package com.xjy.module;

/**
 * 首次使用到才会创建对象
 * 懒汉式
 * */
public class singleMod3 {
    // 私有成员方法
    private singleMod3(){}
    // 声明本类类型变量
    // private static singleMod3 single;
    // 声明本类类型变量,volatile关键字保证可见性和有序性
    private static volatile singleMod3 single;
    // 使用才创建,不使用不创建
    public synchronized static singleMod3 getInstance(){
        if (single == null) single = new singleMod3();
        return single;
    }
    // 双重检查锁模式,提高了单环境运行的效率
     public static singleMod3 getSingle(){
        if (single == null) { 
            synchronized (singleMod3.class){
                if (single == null) single = new singleMod3();
            }
        }
        return single;
    }
   
}

5. 懒汉式内部类模式

package com.xjy.module;

/**
 * 首次使用到才会创建对象
 * 懒汉式: 静态内部类模式
 * */
public class singleMod5 {
    // 私有成员方法
    private singleMod5(){}
    // jvm在加载类时不会加载静态的内部类,使用到静态内部类才会加载
    private static class SingletHolder{
        private final static singleMod5 single=new singleMod5();
    }
    // 提供公共访问方式
    public static singleMod5 getInstance(){
        return SingletHolder.single;
    }
}

6. 枚举模式

// 枚举实现方式
public enum Singleton {
    instance
}
package com.xjy.module;

public class test {
    public static void main(String[] args) {
        Singleton singleton = Singleton.instance;
        Singleton singleton2 = Singleton.instance;
    }
}
  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值