首页 > 其他分享 >设计模式之单例模式

设计模式之单例模式

时间:2023-03-12 15:36:16浏览次数:27  
标签:Singleton private 实例 static 模式 单例 设计模式 public

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

实现单例模式通常有两种方式:懒汉式和饿汉式。

懒汉式单例模式是指在需要实例化对象时才进行实例化,在实例化之前,该类没有被实例化。常见的懒汉式实现方式有双重检查锁和静态内部类。

// 双重检查锁实现
public class Singleton {
    private volatile static Singleton instance;

    private Singleton() {}

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

// 静态内部类实现
public class Singleton {
    private Singleton() {}

    public static Singleton getInstance() {
        return SingletonHolder.INSTANCE;
    }

    private static class SingletonHolder {
        private static final Singleton INSTANCE = new Singleton();
    }
}

饿汉式单例模式则是在类加载的时候就创建了一个实例,因此可以保证实例的唯一性。常见的饿汉式实现方式有静态常量和静态代码块。

// 静态常量实现
public class Singleton {
    private static final Singleton INSTANCE = new Singleton();

    private Singleton() {}

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

// 静态代码块实现
public class Singleton {
    private static final Singleton INSTANCE;

    static {
        INSTANCE = new Singleton();
    }

    private Singleton() {}

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


无论哪种实现方式,都需要注意线程安全和反序列化等问题。

应用场景:

1、需要限制一个类只能有一个实例,例如线程池、缓存、对话框、日志等。

2、在一个应用程序中,如果有多个实例会导致状态不一致的情况,使用单例模式可以避免这种情况。

3、在某些情况下,系统资源的使用需要限制,例如数据库连接池、线程池等,使用单例模式可以控制系统资源的数量。

4、当我们希望在整个系统中,某个类的对象只存在一个时,可以考虑使用单例模式。

总之,当我们需要保证全局只有一个对象实例,并且需要方便的访问该对象时,可以考虑使用单例模式。

标签:Singleton,private,实例,static,模式,单例,设计模式,public
From: https://www.cnblogs.com/classicltl/p/17208227.html

相关文章

  • Java 建造者模式/链式调用 简单Demo
    最近,公司同事要求我给他们讲一下RxJava,为了更清晰的说明其架构,.简单写了一个链式调用的小Demo,分享给大家/**作者:赵星海(CSDN-深海呐)*时间:2019年3月19日16:56:32*......
  • Java 关于单例模式(懒汉式与饿汉式的区别)
             Java关于单例模式(懒汉式与饿汉式的区别)简单说下两个单例模式的不同点懒汉式:1.内部对象非final类型2.线程安全3.用到特定方法的时候才会实例......
  • 单例bean与原型bean的区别
    在使用Spring开发时,Spring提供了五种scope,分别为singleton,prototype,request,session,globalsession。上图为各个scope描述的官方文档截图。Spring在一开始的时候只提供了s......
  • 从代码层面来讲,何时使用设计模式
    1工厂模式想通过名称获取对象2抽象工厂模式单个工厂不满足对象的生产3单例模式全局只有一个对象4建造者模式通过构造函数创建对象不方便,例如,构造函数参数太多5原型模式......
  • 设计模式(十九)----行为型模式之命令模式
    1、概述日常生活中,我们出去吃饭都会遇到下面的场景。定义:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方......
  • 前端设计模式——策略模式
    在前端开发中,策略模式是一种常用的设计模式,它可以让我们在不改变对象本身的情况下,通过修改其内部的算法实现不同的行为。策略模式常常被用于实现一些复杂的业务逻辑,特别是......
  • 单例
    单例(一个脚本调另一个脚本里的变量或方法)示例//待调用的代码usingUnityEngine; publicclassJuse:MonoBehaviour{publicstaticJusem_Instance;    voi......
  • angular onpush模式下优先使用markForCheck手动标记为脏属性并调用检测更新
    import{ChangeDetectorRef,Component,Input,ChangeDetectionStrategy,SimpleChanges}from'@angular/core';@Component({selector:'app-change-grandson',te......
  • 《从瀑布到敏捷——漫画解读软件开发模式变迁史》读后感
    读了《从瀑布到敏捷——漫画解读软件开发模式变迁史》我大致了解了瀑布模型,敏捷开发,看板,SCRUM和精益软件开发的概念。如果运用瀑布模型进行软件开发的话,是把一整个完整的......
  • python实现RabbitMQ六种模式
    为什么管MQ叫做分布式消息中间件?分布式表示应用场景(用户基数大采用分布式提供服务的方式)。消息表示通信形式。中间件表示媒介。生产者和消费者都只是个python程序......