首页 > 编程语言 >Java单例设计模式(懒汉式与饿汉式)

Java单例设计模式(懒汉式与饿汉式)

时间:2024-09-09 19:25:50浏览次数:11  
标签:Java singles 创建对象 Singles static 饿汉 设计模式 懒汉

思考这样一个问题

如果要在类的外部有且只有一个对象,我们需要怎么做呢

首先要保证构造方法私有化,保证不能用new的方法来在外部创建对象

一.单例设计模式

单例设计模式是一种常见的设计模式,用于确保一个类只有一个实例,并提供一个全局访问点来访问该实例。无论是懒汉式还是饿汉式,都要确保构造方法私有化,确保不能从外部直接实例化

所以我们想如果在类的外部不能创建的话 可以在内部创建,有两种形式

一种是属性创建,一种是方法返回

但是由于外部没有对象,所以两种方法都需要使用static修饰,从而通过类名.的形式调用

用static修饰的原因,是静态方法中不能直接调用非静态的属性和方法

属性私有化的原因是不能让其在外部直接获取属性,虽然他不能创建新的对象,但是它可以销毁已有对象,因此属性私有化

二.懒汉式

public class Singles {
    private static Singles singles = null;
    private Singles(){}
    public static Singles getSingles(){
        if (singles==null){
            singles = new Singles();
        }
        return singles;
    }

懒汉式的优点:占用空间少,当需要时才会创建对象

懒汉式的缺点:懒汉式每次使用时都会判断是否为空,倘若为空 才会创建对象 所以浪费时间

注意:要私有化singles的目的是为了防止在外部修改singles的值,防止已实例化但是被赋值为null从而再次实例

三.饿汉式

public class Single {
    private Single(){}
   private static Single single = new Single();
    public static Single getSingle(){
        return single;
    }
}

饿汉式的优点:创建速度快,不需要判断直接创建对象

饿汉式的缺点:饿汉式不管你是否使用该对象,都会直接创建对象,从而占用内存

标签:Java,singles,创建对象,Singles,static,饿汉,设计模式,懒汉
From: https://blog.csdn.net/2401_86266665/article/details/142066382

相关文章

  • Java JVM 零基础,详细讲解一(基础结构)。
    在Java编程的世界里,JVM是一个至关重要的存在。如果你是一个零基础的开发者,想要深入了解JVM,那么这篇博客将为你提供超详细的讲解。一、什么是JVM?JVM(JavaVirtualMachine,Java虚拟机)是一种用于计算设备的规范,它是一个虚构出来的计算机,通过在实际的计算机上仿真模拟各种计......
  • 《Java 归并排序:高效稳定的排序算法》
      一、归并排序简介介绍归并排序是一种基于分治思想的经典排序算法,适用于各种规模的数据排序任务。 二、算法原理(一)分治策略将未排序数组分割成两个子数组,递归地对子数组进行排序,最后合并成有序数组。(二)关键步骤1.分割阶段:将数组分成两个子数组,通常是平均分割。2.......
  • 【Java基础】
    Java基础1.变量与数据类型在Java中,变量用于存储数据,每个变量都有类型。Java的数据类型分为两类:基本数据类型(如int,double,char,boolean)引用数据类型(如String,数组,对象)示例:publicclassMain{publicstaticvoidmain(String[]args){//......
  • [Java面向对象]static方法
    static方法不能重写在Java中,静态方法不能被重写。静态方法属于类本身,而不是类的实例。因此,当你在子类中定义一个与父类静态方法同名的方法时,这不是重写,而是隐藏。publicclassclassA{publicstaticvoidmethod(){System.out.println("classA的静态方法");......
  • 【最新华为OD机试E卷-支持在线评测】通过软盘拷贝文件(200分)多语言题解-(Python/C/Ja
    ......
  • java毕业设计-基于springboot+vue的高校运动会管理系统设计和实现,基于springboot+vue
    博主介绍:✌️码农一枚,专注于大学生项目实战开发、讲解和毕业......
  • java毕业设计-基于springboot+vue的篮球吧一体化服务平台设计和实现,-基于springboot的
    博主介绍:✌️码农一枚,专注于大学生项目实战开发、讲解和毕业......
  • 零到一学Java:内部类
    前言距今为止,我们了解的都是普通类的定义,那就是直接在IDEA或eclipse中直接新建一个class。新建完成后,你就会拥有一个class文件的定义,这种操作太简单了,时间长了就会枯燥,我们年轻人多需要更新潮和骚气的写法,好吧,既然你提到了那就使用内部类吧,这是一种有用而且骚气......
  • java 递归
    java递归目录java递归1递归概念2递归的基本使用3示例:递归求阶乘1递归概念以编程的角度来看,递归指的是方法定义中调用方法本身的现象把一个复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解递归策略只需少量的程序就可描述出解题过程所需要的多次重复计......
  • Day05.Java流程控制1
    Java流程控制用户交互Scanner基本语法:Scanners=newScanner(System.in);通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前我们一般需要使用hasNext()与hasNextLine()判断是否还有输入的数据next()一定要读取到有效字符后才可以结束输入对输入有效字符之前遇到的空......