单例设计模式

​每天一个面试题,有手就能学废,大家好,我是爱码士赵Sir!

1、什么是单例模式

单例设计模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点

就是这个类只能有一个对象,不能乱搞,然后通过一个方法能拿到它。

2、实现步骤

1、构造犯法私有化,私有化了之后,外部就不会通过new的方式来产生它的实例了,

2、声明一个本类对象,自己要生成一个对象,让别人去用

3、给外部提供一个静态方法获取对象实例,静态的方法可以不用实例化对象就可以调用,直接用类名 直接去调用

3、实现的方式

1、饿汉式:对象的生命周期比较长,在声明本类对象的时候,直接new 一个实例,占用内存时间长,提高效率

//饿汉式 在类被加载后,对象被创建到程序结束后释放
class Singleton{  
    //构造方法私有化  
    private Singleton(){} 
     //声明一个本类的对象  
     private static Singleton  singleton=new Singleton();
     //提供一个静态方法获取对象实例  public static Singleton getInsatance(){  
     return singleton; 
     }
    
}

2、懒汉式 对象的生命周期比较短,在第一次调用getInstance方法时才会new一个对象供外部调用,占用内存时间短,第一次使用时,效率稍低点

建议大家用懒汉式,懒加载延迟加载

/

//懒汉式第一次调用getInstance方法时
class Singleton{  
    //构造方法私有化  
    private Singleton(){}  
    //声明一个本类的对象  
    private static Singleton  singleton;  
    //提供一个静态方法获取对象实例  
    public static Singleton getInsatance(){
    if(singleton==null){
    singleton==ew Singleton(); 
    }   
    return s;  
    }
}

上面的demo 在多线程访问的时候,会有安全问题,会有可能产生多个实例,多线程情况下的单例,怎么实现呢?大佬们在评论区留言!

4、单例的优点

1、在设计一些工具类的时候(通常工具类只有功能方法,没有属性)

2、工具类可能会被频繁调用

3、目的是为了节省重复创建对象所带来的内存消耗,从而提高效率

能不能使用构造方法私有化+静态方法来代替单例?

//使用构造方法私有化+静态方法 来实现工具类 比如JDK里的Math函数class Tools{ priavte Tools(){ } public static void print(){ }}
这种实现方式,所有的方法都是静态的,方法里的临时变量都会存在方法区而单例模式的方法依赖于对象,可以不是静态的,执行方法的时候会入栈然后创建临时变量,方法执行完毕会出栈临时变量会 销毁,这样比的话,单例模式的内存开销比构造方法私有化加静态方法实现要小

你学废了么​!么么哒么么哒​么么么么哒!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值