java 23种设计模式解析-单例模式

1.单例模式:

    Ⅰ 懒汉式-线程不安全:

public class SingleTon {
    private static SingleTon singleTon;
    private SingleTon(){}
    public static SingleTon getInstance(){
        if (singleTon==null){
            singleTon=new SingleTon();
        }
        return singleTon;
    }
}

 Ⅱ 饿汉式-线程安全:

public class SingleTon {
    private static SingleTon singleTon=new SingleTon();
    private SingleTon(){}
    public static SingleTon getInstance(){
        return singleTon;
    }
}

Ⅲ双重校验锁-线程安全

public class SingleTon {
    private volatile static SingleTon singleTon=new SingleTon();//volatile  可见性 有序性  强制加入jvm共享内存 具有可见性、有序性, getInstance()静态方法在加载时jvm 才进行初始化, singleTon=new SingleTon()分三步执行:1 分配内存 2 初始化 3 指向分配内存地址
    private SingleTon(){}
    public static SingleTon getInstance(){
        if (singleTon==null){
            synchronized (SingleTon.class){
                if (singleTon==null){
                    singleTon=new SingleTon();
                }
            }
        }
        return singleTon;
    }
}

Ⅳ静态内部类实现  :

public class SingleTon {
    private SingleTon(){}

    private  static class SingleTonHolder{
        private static final SingleTon INSTANCE=new SingleTon();//静态内部类  
    }
    /*
    * jvm  在调用getInstance()方法时才会初始化SingleTonHolder 标记为final 常量   jvm 在类编译期就完成常量初始化  而不是在类初始化时再赋值
    * */

    public static SingleTon getInstance(){ 
        return SingleTonHolder.INSTANCE;
    }
}

Ⅴ 枚举实现

public enum SingleTon {

    INSTANCE;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值