Java设计模式-单例模式(Singleton)

简介: Java设计模式-单例模式(Singleton)

文章目录

简介

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

注意:

1、单例类只能有一个实例。

2、单例类必须自己创建自己的唯一实例。

3、单例类必须给所有其他对象提供这一实例。

单例模式

实现单例模式需要以下几点:

  1. 私有化实例变量。
  2. 私有化构造器。
  3. 提供一个获取实例的静态方法。

饿汉式

/**

* 饿汉式

* 类加载到内存后,被实例化一个单例,JVM保证线程安全

* 简单实用 推荐实用,

* 唯一缺点:不管用不用,类装载是都完成实例化

*/

public class Singleton01 {

   private static final Singleton01 INSTANCE = new Singleton01();

   private Singleton01(){}

   private static Singleton01 getInstance(){

       return INSTANCE;

   }

   public static void main(String[] args) {

       Singleton01 s1 = Singleton01.getInstance();

       Singleton01 s2 = Singleton01.getInstance();

       System.out.println(s1 ==s2);

   }

}

懒汉式

/**

* 懒汉式

*/

public class Singleton02 {

   private static  Singleton02 INSTANCE;

   private Singleton02(){}

   public static  Singleton02 getInstance(){

       if(INSTANCE == null){

           try {

               Thread.sleep(1);

           } catch (InterruptedException e) {

               e.printStackTrace();

           }

           INSTANCE = new Singleton02();

       }

       return INSTANCE;

   }

}

懒汉式线程安全

/**

* 懒汉式

*/

public class Singleton03 {

   private static Singleton03 INSTANCE;

   private Singleton03(){}

   //线程安全6

   public static synchronized Singleton03 getInstance(){

       if(INSTANCE == null){

           try {

               Thread.sleep(1);

           } catch (InterruptedException e) {

               e.printStackTrace();

           }

           INSTANCE = new Singleton03();

       }

       return INSTANCE;

   }

}

懒汉式线程安全另外写法

/**

* 懒汉式

*/

public class Singleton04 {

   private static Singleton04 INSTANCE;

   private Singleton04(){}

   //线程安全6

   public static  Singleton04 getInstance(){

       if(INSTANCE == null){

           synchronized (Singleton04.class) {

               try {

                   Thread.sleep(1);

               } catch (InterruptedException e) {

                   e.printStackTrace();

               }

               INSTANCE = new Singleton04();

           }

       }

       return INSTANCE;

   }

}

懒汉式 双端检索模式

/**

* 懒汉式

* 可以通过synchronized 解决,但是也带来了效率下降

*/

public class Singleton05 {

   private  static volatile  Singleton05 INSTANCE;

   private Singleton05(){}

   //线程安全6

   public static Singleton05 getInstance(){

       if(INSTANCE == null){

           synchronized (Singleton05.class) {

               try {

                   Thread.sleep(1);

               } catch (InterruptedException e) {

                   e.printStackTrace();

               }

               INSTANCE = new Singleton05();

           }

       }

       return INSTANCE;

   }

}

总结

单例模式比较简单,保证只有一个实例就ok。

相关文章
|
2天前
|
设计模式 缓存 安全
Java设计模式的单例模式应用场景
Java设计模式的单例模式应用场景
17 4
|
3天前
|
设计模式 缓存 Java
Java设计模式:享元模式实现高效对象共享与内存优化(十一)
Java设计模式:享元模式实现高效对象共享与内存优化(十一)
|
2天前
|
设计模式 安全 Java
在Java中实现单例模式的正确方法
在Java中实现单例模式的正确方法
|
2天前
|
设计模式 监控 安全
设计模式之代理模式(Java)
设计模式之代理模式(Java)
|
2天前
|
设计模式 Java 中间件
深入探索Java设计模式:责任链模式解析与实践
深入探索Java设计模式:责任链模式解析与实践
5 0
|
2天前
|
设计模式 Java 开发者
Java中的设计模式深度解析
Java中的设计模式深度解析
|
2月前
|
设计模式 安全 Java
【JAVA】Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式
【JAVA】Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式
|
7天前
|
设计模式 缓存 安全
Java设计模式的单例模式应用场景
Java设计模式的单例模式应用场景
18 8
|
4天前
|
设计模式 SQL 安全
Java设计模式:单例模式之六种实现方式详解(二)
Java设计模式:单例模式之六种实现方式详解(二)
|
7天前
|
设计模式 缓存 安全
java中的设计模式&单例模式
java中的设计模式&单例模式