设计模式-单例模式

单例模式

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

1.懒汉式 --- 静态常量方式 (线程安全)


public class Singleton{

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

2.饿汉式 --静态代码块方式 (线程安全)

public class Singleton{

 private static Singleton instance;
 
 static{
 
   instance=new Singleton();
 }

 public static Singleton getInstance(){
 
    return instance;
 } 
}

3.懒汉式 (线程不安全)

 public class Singleton{
 
 private static Singleton singleton;
 
 private Singleton(){}
 
 public static Singleton getInstance(){
 
   if(singleton==null){
   
   singletion=new Singleton();
   }
   
   return singletion;
  }
 }

4.懒汉式(线程安全 ,方法上加同步锁)
获取实例的getInstance方法上加了同步锁,保证了多线程场景下的单例,效率会有折损

public class Singleton{

 private static Singleton singleton;
 
 private Singleton(){}
 
 public static synchronized Singleton getInstance(){

      if(singleton==null){
      
        singleton=new Singleton();
      }
      return singleton;
 }
}

5.双重校验锁(线程安全,效率高)
此种实现不用每次都需要获得锁,减少获得锁和等待的事件
注意的volatile 关键字的使用,保证了各线程对singleton 静态实例修改的可见性


public class Singleton{

public volatile static Singleton singleton;

private Singletion(){}

public Singleton getInstance(){

        if(singleton==null){

            if(synchronized(Singleton.class)){
             
              if(slingleton==null){
              
                singleton=new Singleton();
              }
            
            }
        }
       return singleton;
}
}

6.静态内部类实现单例 (线程安全,效率高)
这种方式Singleton 类被装载了,Instance 不一定被初始化,因为SingletonHolder 类没有被主动使用,只有通过显式调用getInstance 方法时,才会显式装载SingletonHolder类,从而实例化inatance;

注意内部类SingletonHolder 要同static 进行修饰其中的静态变量INSTANCE 必须是final的

 
 public class Singleton{
 
  public class SingletonHolder{
  
    public static final Singleton INSTANCE=new Singleton();
  }
  
  private Singeton(){}
  
  public static final Singletion getInstance(){
  
    return SingletonHolder.INSTANCE;
  }
 }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 单例模式(Singleton Pattern)是众多设计模式中较为简单的一个,同时它也是面试时经常被提及的问题,如...
    廖少少阅读 605评论 0 1
  • 单例模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属...
    Graddy阅读 427评论 0 0
  • 单例模式(Singleton Pattern)是 编程语言中最简单的设计模式之一。这种类型的设计模式属于创建型模式...
    Hi夜城阅读 468评论 1 10
  • 单例模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属...
    Wavis阅读 86评论 0 0
  • 一.什么是单例模式 单例模式的定义:确保一个类只有一个实例,并提供一个访问他的全局访问点。单例模式是几个设计模式中...
    Geeks_Liu阅读 2,250评论 0 10