Java设计模式—单例模式(Singleton Pattern)

前言:单例模式是一种非常非常实用的设计模式,在我们实际的应用中被广泛的使用。通过保证全局的唯一性、节省资源、提高性能、简化代码实现和方便管理、可维护性的优点,可以帮助开发人员更加高效的完成工作!

文章目录:

  1. 简介
  2. 概念
  3. 作用
  4. 优、缺点
  5. 代码案例

一、单例模式的简介

单例模式(Singleton Pattern)是一种创建型设计模式,一种非常非常常用的设计模式。它保证一个类仅有一个实例,并提供一个访问它的全局访问点;

Java中可以通过多种方式实现单例模式,比较常见的包括:

  1. 饿汉式:类加载时就创建了对象实例,因此线程安全,但会造成资源浪费;
  2. 懒汉式:只有在需要时才创建对象实例,节省了系统资源,但需要考虑线程安全问题;
  3. 双重校验锁:在懒汉式的基础上加入双重校验,保证了线程的安全且减少了锁的“竞争” ;

饿汉式和懒汉式的区别:

饿汉式:类加载时创建对象实例。

懒汉式:只有在需要的时候才创建对象实例。

二、单例模式的概念

单例模式(Singleton Pattern)它保证一个类仅有一个实例,并提供一个访问全局的访问点;

三、单例模式的作用

  • 通过单例模式,可以确保一个类只有一个实例对象,避免了由于多个实例导致的数据不一致等问题;
  • 通过单例模式,在系统中只需要创建一个对象实例,可以避免重复创建对象所造成的资源浪费;
  • 通过单例模式,可以减少系统中对象的数量,从而提高系统的性能和响应速度;
  • 通过单例模式,可以简化代码的实现,避免了重复创建、初始化和管理对象的过程,提高了代码的可读性和可维护性;
  • 通过单例模式,可以方便地对系统中的对象进行管理和维护,例如控制对象的生命周期、监控对象的状态等;

四、单例模式的优、缺点

单例模式的优点

  • 保证唯一性
  • 节省系统资源
  • 提高系统性能
  • 简化代码的实现
  • 方便管理和维护

单例模式的缺点

  • 能会影响程序的灵活性:因为单例模式只允许一个对象实例存在,可能会对程序的扩展和修改带来一定的困难;
  • 可能会增加代码的复杂性:在实现单例模式时,需要考虑线程安全等问题,可能会增加代码的复杂性;
  • 需要考虑线程安全问题:在实现单例模式时,需要考虑多线程并发访问的情况,避免出现线程安全问题;

五、代码案例

首先,演示懒汉式

在懒汉单例模式中,实例对象创建,在第一次被使用的时候进行的

public class Sluggardstyle{
    private static Sluggardstyle instance;

    private Sluggardstyle() {}

    public static synchronized Sluggardstyle getInstance() {
        if (instance == null) {
            instance = new Sluggardstyle();
        }
        return instance;
    }
}

然后演示饿汉式

在饿汉式单例模式中,在类加载时被创建



public class HungryHanstyle{
    private static HungryHanstyle instance = new HungryHanstyle();

    private HungryHanstyle() {}

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

最后演示双重校验锁

双重校验锁单例模式,它结合了饿汉式和懒汉式的优点,即实现了延迟加载,又保证了线程的安全

public class DoubleLockmode{
    private static volatile DoubleLockmode instance;

    private DoubleLockmode() {}

    public static DoubleLockmode getInstance() {
        if (instance == null) {
            synchronized (DoubleLockmode.class) {
                if (instance == null) {
                    instance = new DoubleLockmode();
                }
            }
        }
        return instance;
    }
}

以上三种写法,可以根据自己的需求和应用场景而去实现

总结:

单例模式有优点也有缺点,具体如何使用,看需求;它的优点就是:”保证唯一、节省系统的资源、提高性能“;有优点也就有缺点:”在实现单例模式时候,需要考虑到线程的安全的问题,考虑到这个问题就要解决这个问题,这个时候可能就会增加代码的复杂性了“;

你可能感兴趣的:(单例模式,java,设计模式)