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。

相关文章
|
11天前
|
设计模式 安全 Java
Java编程中的单例模式:理解与实践
【10月更文挑战第31天】在Java的世界里,单例模式是一种优雅的解决方案,它确保一个类只有一个实例,并提供一个全局访问点。本文将深入探讨单例模式的实现方式、使用场景及其优缺点,同时提供代码示例以加深理解。无论你是Java新手还是有经验的开发者,掌握单例模式都将是你技能库中的宝贵财富。
16 2
|
21天前
|
设计模式 安全 Java
Java编程中的单例模式深入剖析
【10月更文挑战第21天】在Java的世界里,单例模式是设计模式中一个常见而又强大的存在。它确保了一个类只有一个实例,并提供一个全局访问点。本文将深入探讨如何正确实现单例模式,包括常见的实现方式、优缺点分析以及最佳实践,同时也会通过实际代码示例来加深理解。无论你是Java新手还是资深开发者,这篇文章都将为你提供宝贵的见解和技巧。
92 65
|
10天前
|
设计模式 安全 Java
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
|
11天前
|
设计模式 安全 Java
Java编程中的单例模式深入解析
【10月更文挑战第31天】在编程世界中,设计模式就像是建筑中的蓝图,它们定义了解决常见问题的最佳实践。本文将通过浅显易懂的语言带你深入了解Java中广泛应用的单例模式,并展示如何实现它。
|
18天前
|
设计模式 存储 数据库连接
PHP中的设计模式:单例模式的深入理解与应用
【10月更文挑战第22天】 在软件开发中,设计模式是解决特定问题的通用解决方案。本文将通过通俗易懂的语言和实例,深入探讨PHP中单例模式的概念、实现方法及其在实际开发中的应用,帮助读者更好地理解和运用这一重要的设计模式。
14 1
|
22天前
|
设计模式 Java 程序员
[Java]23种设计模式
本文介绍了设计模式的概念及其七大原则,强调了设计模式在提高代码重用性、可读性、可扩展性和可靠性方面的作用。文章还简要概述了23种设计模式,并提供了进一步学习的资源链接。
36 0
[Java]23种设计模式
|
6天前
|
设计模式 JavaScript Java
Java设计模式:建造者模式详解
建造者模式是一种创建型设计模式,通过将复杂对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。本文详细介绍了建造者模式的原理、背景、应用场景及实际Demo,帮助读者更好地理解和应用这一模式。
|
18天前
|
设计模式 SQL 安全
Java编程中的单例模式深入解析
【10月更文挑战第24天】在软件工程中,单例模式是设计模式的一种,它确保一个类只有一个实例,并提供一个全局访问点。本文将探讨如何在Java中使用单例模式,并分析其优缺点以及适用场景。
11 0
|
22天前
|
SQL 设计模式 Java
[Java]单例模式
本文介绍了单例模式的概念及其实现方式,包括饿汉式和懒汉式两种形式,并详细探讨了懒汉式中可能出现的线程安全问题及其解决方案,如锁方法、锁代码块和双重检查锁(DCL)。文章通过示例代码帮助读者更好地理解和应用单例模式。
26 0
|
15天前
|
设计模式 安全 Java
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式