设计模式 - - - 从单例模式谈起

面试中和工作中经常能遇到单例模式的相关问题:在这里总结一下单例模式。

1,什么是单例模式?

  • 单例模式就是在整个系统运行的过程中某一个类只有一个实例对象,实现这种方式的方法就称为单例模式。
  • Java中单例模式定义:“一个类有且仅有一个实例,并且自行实例化向整个系统提供。”

2,为什么要有单例模式?

  • 单例模式的存在原因是一些实例如果在系统中存在多份实例的话,会引发问题,如产生序列号的实例,如果存在多份的话,序列号产生就会出现错误。
  • 如果系统中只存在一份实例的话 整个系统的开销比较小。

3,单例模式的特点:

  • 系统中只存在一份实例
  • 实例对整个系统易于访问。

4,单例模式的优点

  • 实例控制:单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。
  • 灵活性:因为类控制了实例化过程,所以类可以灵活更改实例化过程

5,单例模式的缺点

  • 虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例,将仍然需要一些开销。可以通过使用静态初始化解决此问题。
  • 可能的开发混淆:使用单例对象(尤其在类库中定义的对象)时,开发人员必须记住自己不能使用new关键字实例化对象。因为可能无法访问库源代码,因此应用程序开发人员可能会意外发现自己无法直接实例化此类。

7,单例模式的三种实现方式:

public class Singleton{
   private static Singleton singletonInstence=null;

   //这句话很关键
   private Singleton(){
   }
   public static synchronized Singleton  getInstence()  {
   if(singletonInstence==null){
     singletonInstence = new Singleton();
   }
   return singletonInstence;
   }
}




public  class  Singleton(){
 private static Singleton SingletonInstence 
                                = new Singleton();

private  Singleton(){}
private static Singleton   getInstance(){
   return SingletonInstence;
}
} 


1,最优写法  双锁模式

class Singleton(){
  private static Singleton SingletonInstence = null;

  private Singleton(){}

  public staitc synchrnized Singleton                                  getSingletonInstence(){
       synchronized(Singleton.class){
           if(SingletonInstence = null) {
                 SingletonInstence = new Singleton();
           }
       }
return SingletonInstence ;
  }
}

对设计模式感情兴趣的朋友可以加群:255453635 下载设计模式的相关资料,此外群里还有java spring 前端 数据库 nosql 并发编程、多线程编程等java方面的资料。请添加信息注明:CSDN

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

专注网赚的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值