Java创建者模式(一)——单例设计模式(饿汉式、懒汉式、枚举式 | 完成详解,附有代码+案例)

news/2024/12/22 15:27:23/

文章目录

    • 单例设计模式
      • 4.1.1 单例模式的结构
      • 4.1.2 单例模式的实现
        • 4.1.2.1 饿汉式-静态变量方式
        • 4.1.2.2 饿汉式-静态代码块方式
        • 4.1.2.3 懒汉式-线程不安全
        • 4.1.2.4 懒汉式-线程安全
        • 4.1.2.5 懒汉式-双重检查锁
        • 4.1.2.6 饿汉式—枚举类

单例设计模式

提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

4.1.1 单例模式的结构

单例模式的主要有以下角色:

  • 单例类。只能创建一个实例的类,即只能创建一个对象。
  • 访问类(也就是测试类),使用单列类

4.1.2 单例模式的实现

单例设计模式分类两种:​	饿汉式:类加载就会导致该单实例对象被创建	​	懒汉式:类加载不会导致该单实例对象被创建,而是首次使用该对象时才会创建
4.1.2.1 饿汉式-静态变量方式

饿汉式,方式1----静态变量方式

该方式在成员位置声明Singleton类型的静态变量,并创建Singleton类的对象instance。instance对象是随着类的加载而创建的。如果该对象足够大的话,而一直没有使用就会造成内存的浪费。

java">//饿汉式,方式1----静态变量方式
public class SingLeton {// 1.私有构造方法,让外界不能创建该类的对象。private SingLeton() {}// 2.在本类中的成员位置创建本类的对象// 此处的static是根据3.中的方法是静态方法设置的private static SingLeton instance = new SingLeton();// 3.提供一个公共的访问方式,让外界获取该对象,所以用staticpublic static SingLeton getInstance(){return instance ;}
}
===========================================================public class Test {public static void main(String[] args) {// 创建SingLeton类的对象SingLeton instance1 = SingLeton.getInstance();SingLeton instance2 = SingLeton.getInstance();// 判断获取的是否是同一个对象boolean b = instance1 == instance2;System.out.println(b);//true,说明创建了一个对象}
}
4.1.2.2 饿汉式-静态代码块方式

饿汉式,方式1----静态代码块方式

该方式在成员位置声明Singleton类型的静态变量,而对象的创建是在静态代码块中,也是对着类的加载而创建。所以和饿汉式的方式1基本上一样,当然该方式也存在内存浪费问题。

java">//饿汉式----静态代码块方式
public class SingLeton {// 1.私有构造方法,不让外界创捷该类的对象private SingLeton() {}// 2.声明SingLeton类型的变量private static SingLeton instace;//null// 3.静态代码块中进行赋值static {instace = new SingLeton();}// 4.对外提供获取该类对象的方法public static SingLeton getInstance(){return instace;}
}
==========

http://www.ppmy.cn/news/1527240.html

相关文章

【C++】探秘二叉搜索树

🚀个人主页:奋斗的小羊 🚀所属专栏:C 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 前言💥一、二叉搜索树💥1.1 特点💥1.2 基本操作💥1.2.1 插入…

c++ templates常用函数

说明 c templates学习中会遇到大量的模版常用函数,书上不会详细介绍,查看一个之后要永久记录一段时间之后再看看,这里总结一下。 undeclared(); undeclared();//若undeclared();未定义,则在第一阶段编译时报错 undeclared(t);…

java中SPI(服务提供者的接口)

java中SPI(服务提供者的接口) 一:什么是SPI二:java SPI示例1.SPI服务提供方2.SPI服务应用方开发者 三:JavaSPI 机制的核心-ServiceLoader 一:什么是SPI SPI:“服务提供者的接口”,是…

mysql数据库如何开启binlog日志

首先我们要知道什么是binlog日志 binlog是 MySQL数据库的二进制日志文件,记录了数据库更改的所有操作,但不包括SELECT和SHOW这类操作,这些操作对数据进行修改、管理操作、数据库修改等操作都会被记录在日志中。 对于一个sql,它…

通过adb命令打开手机usb调试

adb shell settings put global adb_enabled 1 这个命令会将全局ADB启用设置为1,允许通过ADB进行调试。 adb shell settings put secure adb_authentication_enabled 1 这个命令会启用ADB身份验证,允许设备在连接时要求授权。 adb shell settings put …

BSN六周年:迈向下一代互联网

当前,分布式技术作为现代计算机科学和信息技术的重要组成部分,在云计算、区块链等技术的推动下,正以多样化的形式蓬勃发展。 ​而区块链作为一种特殊的分布式系统,近年来也在各个领域得到了广泛关注。通过在区块链上运行智能合约…

JDBC笔记

文章目录 准备MySQL数据的建立和建表 idea 建工程和模块设置属性配置文件编写JDBC代码URL的设置JDBC 代码配置文件 准备MySQL 数据的建立和建表 idea 建工程和模块 设置属性配置文件 编写JDBC代码 URL的设置 JDBC 代码 package com.yanyu;import java.sql.*; import java.util…

神经网络的公式推导与代码实现(论文复现)

神经网络的公式推导与代码实现(论文复现) 本文所涉及所有资源均在传知代码平台可获取 概述 本文将详细推导一个简单的神经网络模型的正向传播、反向传播、参数更新等过程,并将通过一个手写数字识别的例子,使用python手写和pytorch…