首页 > 其他分享 >饿汉式懒汉式的简单实现 --单例模式001

饿汉式懒汉式的简单实现 --单例模式001

时间:2024-09-24 19:20:43浏览次数:10  
标签:Singleton 饿汉 -- 对象 001 单例 设计模式 懒汉

单例模式-设计模式 --001

设计模式与单例模式

  1. 设计模式是软件开发人员在软件设计中,对常见问题的解决方案的总结和抽象。针对软件开发中常见问题和模式的通用解决方案。一种可以被重复利用的解决方案。
    而单例模式是设计模式中最简单的类型之一。
  2. 定义:确保一个类在绝对情况下都只有一个实例对象,并提供一个全局访问点。
  3. 应用场景:
    1.现实生活中:国家主席、CEO等。
    2.spring框架中:ApplicationContext、数据库的连接池等。

饿汉式懒汉式的简单实现

一、饿汉式

  1. 定义:“饿汉”:从字面意思理解,饿汉怕饿,所以会事先准备好食物,在需要时即可拿来吃。即饿汉式在一开始类调用的时候就已经实例化并创建了单例对象。
  2. 实现:
/**
 * 单例模式实现 9/24/2024
 * 1.构造方法私有化
 * 2.对外提供一个公开的静态方法,用这个方法获取单个实例
 * 3.定义一个静态变量,在类加载的时候,初始化静态变量(只初始化一次)
 *
 * 饿汉式单例模式: 类加载时对象就创建好了,不管用与否,提前创建好对象。
 * */
public class Singleton {
    private static Singleton s = new Singleton();
    private Singleton(){
    }
    public static Singleton get(){
        return s;
    }
}

在测试程序中再去new 多个Singleton对象时得到的对象都是同一个,即Singleton1== Singleton2 == Singleton3…

二、懒汉式

  1. 定义:“懒汉”:懒汉很懒惰,只有在每次饿的时候才会去准备吃的。在Java应用中即一开始不会实例化对象,只有在使用的时候才会new。
  2. 实现:
/**
 * 懒汉式单例模式:使用这个对象时再创建对象,不要在类加载的时候就创建对象。
 * 1.构造方法私有化
 * 2.对外提供一个静态方法,通过这个方法可以获取到Singleton对象
 * 3.提供一个静态变量,但是变量的值为null
 */
public class Singleton {
    private static Singleton s;
    private Singleton(){

    }
//    将静态变量s先不赋值,当第一次需要调用get方法得到对象时才会创建对象
//    在之后还需要调用get方法时直接返回第一次new好的对象即可。
    public static Singleton get(){
        if(s == null) {
            s = new Singleton();
        }
        return s;
    }
}

标签:Singleton,饿汉,--,对象,001,单例,设计模式,懒汉
From: https://blog.csdn.net/weixin_73330969/article/details/142496850

相关文章

  • 【C++】类和对象——下
    一.类和对象(下)1.再探构造函数•之前我们实现构造函数时,初始化成员变量主要使⽤函数体内赋值,构造函数初始化还有⼀种⽅式,就是初始化列表,初始化列表的使⽤⽅式是以⼀个冒号开始,接着是⼀个以逗号分隔的数据成员列表,每个"成员变量"后⾯跟⼀个放在括号......
  • redis常用命令
    Redis基操redis不区分大小写,而且redis是单线程数据库(不支持多线程),故redis是基于内存操作,cup不是redis的性能瓶颈,其瓶颈是网络带宽和机器内存一、常用数据库级别指令selectindex切换不同数据库:redis初始数据库有16个,默认使用的是第零个数据库,不同数据库可以存不同的......
  • 《程序猿之设计模式实战 · 适配器模式》
    ......
  • 《微信小程序实战(4) · 地图导航功能》
    ......
  • MATLAB疲劳驾驶预警系统
    MATLAB可以用于开发疲劳驾驶预警系统。以下是一个基本的实现步骤:数据采集:使用摄像头或传感器采集驾驶员的眼睛活动数据和头部姿势数据。可以使用MATLAB的图像处理工具箱来进行图像处理和眼部跟踪。特征提取:从采集的数据中提取有用的特征,例如眼睛的闭合程度、眼球运动等。可......
  • 要大爆发的AI Agent是什么?(软件测试人员需要掌握)
    什么是AIAgent?AIAgent是一种软件程序,可以与环境交互,收集数据,并使用数据执行自主任务以实现预定目标。即人类设定目标,AIAgent 独立选择实现这些目标所需的最佳行动。简单来说,AIAgent是一个能够感知环境、做出决策并采取行动以达成特定目标的自主实体。它基于预设的目......
  • MFC 之获取文件路径和文件目录路径
    这篇文章我们来介绍一个界面程序中常见的功能,那就是通过点击按钮打开文件浏览对话框,选择对应的文件或者文件夹后,获取其路径,并在编辑中显示出来,当然也会顺带讲一下如果获取当前可执行文件的路径和目录。一、获取文件路径首先我们从工具栏中拖拽一个编辑框和按钮控件到主对话框中,......
  • Flutter:如何修复/删除 .pub-cache 中的所有依赖项
    Flutter:如何修复/删除.pub-cache中的所有依赖项作者:坚果华为云享专家,InfoQ签约作者,OpenHarmony布道师,电子发烧友鸿蒙MVP,阿里云专家博主,51CTO博客首席体验官,开源项目GVA成员之一,专注于大前端技术的分享,包括Flutter,小程序,安卓,VUE,JavaScript。如果您正在使用Flutter开发应用......
  • DFS序求LCA
    DFS序求LCA介绍欧拉序求LCA的数组总是会忘记开两倍,并且预处理的常数较大。用DFS序求LCA可以解决这些问题。欧拉序:进节点和出节点会重复记录节点。DFS序:深度优先搜索的顺序,不会重新记录。假设要求\(lca(u,v)\),且\(dfn[u]<dfn[v]\)。那么\(dfn[u]\simdfn[v]\)的......
  • 程序员世界大冒险d16
     仔细阅读示例:EnumTest.java,运行它,分析运行结果? publicclassEnumTest{publicstaticvoidmain(String[]args){Sizes=Size.SMALL;Sizet=Size.LARGE;//s和t引用同一个对象?System.out.println(s==t);////是原始数据类型吗?System.out.println(s......