单例模式的几种实现方式

单例模式的几种实现方式

总结在前面:构造方法要私有化,通过静态方法获取单例对象,当然要保证线程同步安全问题

静态内部类创建式

//其实去掉注释不到十行代码,耐心观看
public class SingleStatic {//(优秀!每一个单词都是精华!没有一个是多余的)
    //静态内部类实现模式--线程安全 调用效率高,也可以实现延迟加载
    //static 涉及到的类加载机制, 静态属性,静态代码块,然后顺序加载类代码

    //定义静态内部类 
    //private保证私有别人不能访问,那就不能修改
    //static保证全局唯一
    private static class LazyHolder{
        private static final SingleStatic INSTANCE = new SingleStatic();
    }
    //将默认构造方法私有化
    private SingleStatic(){}
    
    //同样提供静态方法来获取实例
    public static SingleStatic getInstance(){
        return LazyHolder.INSTANCE;
    }
}

懒汉式

//懒汉式的创建方式--调用效率低,方法需要同步synchronized
// 在程序需要的时候创建对象,不需要就不会创建对象也不会造成资源浪费--能够实现延迟加载
public class SingelLazy {

    private static SingelLazy instance ;
    
    private SingelLazy(){}

    public static synchronized SingelLazy getInstance(){
        if(null==instance){
            instance = new SingelLazy();
        }
        return instance;
    }
}

饿汉式

//饿汉式的创建方式--调用效率高
//程序启动类加载时就把对象创建出来了,需要的时候直接返回即可
//不能延时加载 这样的话如果程序从始至终都没使用这个对象的话,会造成一定的资源浪费
public class SingleHarvest {

    private static SingleHarvest instance = new SingleHarvest();
    
    private SingleHarvest(){}
    
    public static SingleHarvest getInstance(){
        return instance;
    }
}

枚举式

public enum  SingelEnum {
	//枚举元素本身就是单例,所以任何情况都是单例的
    INSTANCE;
    //定义自己需要的操作即可
    public void instanceOperation(){}

}

分享即学习,即开心❤️

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值