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

server/2025/1/20 17:10:24/

设计模式

  • https://www.runoob.com/ 这上面有很多东西很好。

  • 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

  • 就是很多个总结了经验,写出了一套优秀的代码。可以在很多地方实现低耦合、高内聚。代码移植性高,可重用性强的。

1、单例设计模式

  • 在整个应用系统中,只有一个实例对象
    • 优点:节省内存,可以复用
    • 缺点:有线程安全问题

2、实现方式

  • 懒汉式:线程不安全的
  • 懒汉式:线程安全【双重校验锁】
  • 饿汉式:天生线程安全的

2.1 懒汉式

  • 实现步骤

    • 创建一个类
      • 构造器私有
      • 创建一个私有的静态的实例对象,不用赋值
      • 创建一个公有的静态的返回实例对象的方法
  • 具体实现

    • 线程非安全的
    package com.sw.java2024.pojo;/*** 懒汉式*  有线程安全问题**/
    public class Singleton01 {//- 构造器私有private Singleton01(){}//- 创建一个私有的静态的实例引用,不用赋值private static Singleton01 singleton = null;//- 创建一个公有的静态的返回实例对象的方法public static Singleton01 getInstance(){if(singleton == null) {singleton = new Singleton01();}return singleton;}}
    • 线程安全【双重校验锁】
    package com.sw.java2024.pojo;/*** 懒汉式*  解决线程安全问题**/
    public class Singleton02 {//- 构造器私有private Singleton02(){}//- 创建一个私有的静态的实例引用,不用赋值//volatile : 能够禁止指令重排private static volatile Singleton02 singleton = null;//- 创建一个公有的静态的返回实例对象的方法//双重校验锁:OK,禁止指令重排public static Singleton02 getInstance(){if (singleton == null) {synchronized (Singleton02.class) {if(singleton == null) {singleton = new Singleton02();}}}return singleton;}}
    

2.2 饿汉式

  • 优点:线程安全
  • 缺点:会造成一定内存浪费
  • 实现步骤
    • 创建一个类
      • 构造器私有
      • 创建一个私有的静态的实例对象,直接赋值
      • 创建一个公有的静态的返回实例对象的方法
package com.sw.java2024.pojo;/*** 饿汉式*  线程安全**/
public class Singleton03 {//- 构造器私有private Singleton03(){}//- 创建一个私有的静态的实例引用,直接赋值private static Singleton03 singleton = new Singleton03();//- 创建一个公有的静态的返回实例对象的方法public static Singleton03 getInstance(){return singleton;}}

http://www.ppmy.cn/server/159940.html

相关文章

python实现pdf转word和excel

一、引言   在办公中,我们经常遇收到pdf文件格式,因为pdf格式文件不易修改,当我们需要编辑这些pdf文件时,经常需要开通会员或收费功能才能使用编辑功能。今天,我要和大家分享的,是如何使用python编程实现…

面试反馈流程及模版

候选人优势 项目经验丰富有大型app经验和应急经验有前端研发经验 面试过程: 自我介绍10年毕业南京师范大学毕业项目经验丰富;微信开放平台: jsapi接口;jsapi如何传输大图片 图片压缩转base64,分多次去传,前端去拼接&#xff1b…

计算机视觉与深度学习:使用深度学习训练基于视觉的车辆检测器(MATLAB源码-Faster R-CNN)

在人工智能领域,计算机视觉是一个重要且充满活力的研究方向。它使计算机能够理解和分析图像和视频数据,从而做出有意义的决策。其中,目标检测是计算机视觉中的一项关键技术,它旨在识别并定位图像中的多个目标对象。车辆检测作为目标检测的一个重要应用,在自动驾驶、智能交…

Flink CDC解决数据库同步,异常情况下增量、全量问题

Flink 1.11 引入了 Flink SQL CDC,CDC 能给我们数据和业务间能带来什么变化?本文由 Apache Flink PMC,阿里巴巴技术专家伍翀 (云邪)分享,内容将从传统的数据同步方案,基于 Flink CDC 同步的解决方案以及更多…

java实现word转html(支持docx及doc文件)

private final static String tempPath "C:\\Users\\xxx\\Desktop\\Word2Html\\src\\test\\";//图片及相关文件保存的路径public static void main(String argv[]) {try {JFileChooser fileChooser new JFileChooser();fileChooser.setDialogTitle("Select a …

Restormer: Efficient Transformer for High-Resolution Image Restoration解读

论文地址:Restormer: Efficient Transformer for High-Resolution Image Restoration。 摘要 由于卷积神经网络(CNN)在从大规模数据中学习可推广的图像先验方面表现出色,这些模型已被广泛应用于图像复原及相关任务。近年来&…

Java 17 新特性详解与代码示例

💖 欢迎来到我的博客! 非常高兴能在这里与您相遇。在这里,您不仅能获得有趣的技术分享,还能感受到轻松愉快的氛围。无论您是编程新手,还是资深开发者,都能在这里找到属于您的知识宝藏,学习和成长…

Docker私有仓库管理工具Registry

Docker私有仓库管理工具Registry 1 介绍 Registry是私有Docker仓库管理工具,Registry没有可视化管理页面和完备的管理策略。可借助Harbor、docker-registry-browser完成可视化和管理。Harbor是由VMware开发的企业级Docker registry服务。docker-registry-browser是…