首页 > 其他分享 >单例模式(Singleton)

单例模式(Singleton)

时间:2024-05-28 14:11:23浏览次数:12  
标签:Singleton 单例 静态 模式 实例 该类

单例模式(Singleton Pattern)

是设计模式中最简单也最常见的一种。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在单例模式中,一个类只有一个实例存在,同时该类的实例由一个预先定义好的静态引用变量所持有,以便在整个系统中随时访问它。

模式结构与角色

  1. 单例类(Singleton):拥有一个私有的静态成员变量来保存单例实例,拥有一个私有的构造器防止被实例化,提供一个公有的静态方法来获取该类的唯一实例。

工作原理

单例模式通过以下步骤来确保一个类只有一个实例并且这个实例易于被访问:

  1. 私有构造器:将类的构造器私有化,防止外部代码通过new关键字创建该类的实例。
  2. 静态私有成员变量:在类内部定义一个静态的私有成员变量来保存该类的唯一实例。
  3. 公有静态方法:提供一个公有的静态方法来获取该类的唯一实例。该方法首先会检查静态成员变量是否已经保存了类的实例,如果已经保存则直接返回该实例;否则创建一个新的实例并保存到静态成员变量中,然后返回该实例。

优点

  1. 控制资源访问:通过单例模式可以确保系统中对某个类的实例只有一个,从而控制对该类资源的访问。
  2. 减少全局变量:在不需要频繁创建和销毁对象的情况下,使用单例模式可以减少内存开销,提高系统性能。
  3. 简化访问:单例模式提供了一个全局访问点,使得系统更容易访问和使用该类的实例。

缺点

  1. 扩展性差:由于单例模式限制了类的实例化,因此很难对其进行扩展和修改。
  2. 滥用可能导致问题:如果滥用单例模式,可能会导致系统中过多的单例类,增加系统的复杂性和维护成本。
  3. 实现方式
  4. 单例模式有多种实现方式,包括饿汉式(静态常量)、饿汉式(静态代码块)、懒汉式(线程不安全)、懒汉式(线程安全,同步方法)、懒汉式(双重检查锁定/DCL,即线程安全,同步代码块)、静态内部类、枚举等。其中,枚举方式是最推荐的实现方式,因为它既简单又安全。

示例代码(Java,使用枚举方式)

public enum Singleton {  
    INSTANCE;  
  
    // 其他方法或属性  
    public void doSomething() {  
        // ...  
    }  
  
    // 获取单例对象的静态方法  
    public static Singleton getInstance() {  
        return INSTANCE;  
    }  
}  
  
// 客户端代码  
public class Client {  
    public static void main(String[] args) {  
        Singleton singleton = Singleton.getInstance();  
        singleton.doSomething();  
    }  
}

标签:Singleton,单例,静态,模式,实例,该类
From: https://www.cnblogs.com/zjjtt/p/18217885

相关文章

  • 装饰器模式(Decorator)
    装饰器模式(DecoratorPattern)是一种结构型设计模式,它允许你动态地给一个对象添加一些额外的职责(即增加其功能),就增加功能来说,装饰器模式相比生成子类更为灵活。装饰器模式是一种对象结构型模式,在其结构图中含有一个作为抽象构件(Component)角色的接口和多个实现了该接口的抽象装饰类......
  • 设计模式概要
    常见的5中设计模式1.但通常所说的“23种设计模式”是指那些在实践中被广泛认可和使用的设计模式。这些设计模式可以分为以下三类:创建型模式(CreationalPatterns):用于处理对象的创建机制,以提高系统的灵活性和可重用性。单例模式(Singleton):确保一个类只有一个实例,并提供一个全局......
  • 设计模式大纲
    设计模式大纲设计模式(DesignPattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。使用设计模式可以提高代码的可读性、可扩展性、可靠性和可测试性。设计模式是软件工程中常用的一种软件设计原则,它是一套被反复使用、多数人知晓的、经过分类的、代码设计......
  • 第一章 设计模式、UML图、软件设计原则
    本系列博客主要参考黑马程序员的Java设计模式详解视频教程1.设计模式概述1.1软件设计模式的概念软件设计模式(SoftwareDesignPattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。它描述了在软件设计过程中的一些不断重复发生......
  • nginx 配置 vue History模式
    解决需要加一行try_files$uri$uri//index.html;,其中/index.html是你自己的目录中的入口文件server{listen[::]:80default_server;#root/var/www/html;#Addindex.phptothelistifyouareusingPHPindexindex.htmlindex......
  • 构建未来|进击的元宇宙模式,打破线上线下界限
     元宇宙是指由虚拟世界、数字孪生和现实世界三个核心元素构成的综合体,具有高度沉浸和交互性,可以提供更为广泛和多样化的虚拟体验,并在现实中影响和塑造人们的生活。如今,随着科技不断发展,VR/AR、区块链、AI等众多技术的逐个成熟,元宇宙开始与现实世界紧密融合,元宇宙开发是指在元......
  • 第五章 并发基础中的Future异步回调模式
    案例:为了提升泡茶效率。下面分别是用阻塞模式和异步回调模式来实现其中的异步泡茶流程。为了异步执行整个泡茶流程,分别设计三条线程:主线程、清洗线程、烧水线程。(1)主线程(MainThread)的工作是:启动清洗线程、启动烧水线程,等清洗、烧水完成后,泡茶喝。(2)清洗线程(WashThread)的工作是:洗......
  • WPF之单例模式
    项目2019/10/09 问题2019年10月9日星期三上午2:461、为了实现单例模式,在App类中添加了如下代码,使用了信号量,但是为什么返回;isNew一直为truepublicpartialclassApp:Application   {       protectedoverridevoidOnStartup(StartupEventArgs......
  • “胖东来”超市商业模式,为何被誉为中国零售业是神一般的存在?
    “胖东来”超市商业模式,为何被誉为中国零售业是神一般的存在?文丨微三云营销总监胡佳东,点击上方“关注”,为你分享市场商业模式电商干货。-胖东来是中国商超界的天花板,被小米老板雷军:誉为“中国零售业是神一般的存在”,2023年的销售收入甚至超100亿元,引无数商超企业、超市老板......
  • 第七十五节 Java设计模式 - 模板方法模式
    Java设计模式-模板方法模式在模板模式中,父抽象类公开几个抽象方法供子类实现。在父抽象类中有另一个方法或几个方法使用抽象方法来实现业务逻辑。抽象方法通常用于父类所需的每个步骤。例如,为了使用新的软件,我们需要下载,安装,配置和运行。如果我们要使用模板模式来编码逻......