20220808-单例设计模式

1. 设计模式

  • 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。
  • 使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。
  • 设计模式就像经典的棋谱,不同的棋局,我们用不同的棋谱,免去我们自己在思考和摸索。

2 单例设计模式

  • 采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法

2.1 懒汉式

  • 将构造器私有化(即无法在本类之外通过new创建对象)
  • 提供私有化静态本类对象变量,并创建对象
  • 提供公共的方法获取对象引用
public class SingleTon01 {
    private static SingleTon01 s = new SingleTon01();
    private SingleTon01() {
    }
    public static SingleTon01 getInstance() {
        return s;
    }
}

2.2 饿汉式

  • 将构造器私有化(即无法在本类之外通过new创建对象)
  • 提供私有化静态本类对象变量,不创建对象
  • 提供公共的方法,在方法中判断对象时候存在,不存在时创建对象,对外提供对象引用
public class SingleTon02 {
    private static SingleTon02 s;
    private SingleTon02() {
    }
    public static SingleTon02 getInstance() {
        if (s == null) {
            s = new SingleTon02();
        }
        return s;
    }
}

2.3 区别

  • 创建的时机不同,饿汉式是在类加载时就创建对象实例,懒汉式是在使用时创建对象实例
  • 饿汉式不存在线程安全问题,懒汉式存在线程安全问题
  • 饿汉式存在浪费资源的可能。
  • java.lang.Runtime使用了单例设计模式
public class Runtime {
    private static Runtime currentRuntime = new Runtime();
    public static Runtime getRuntime() {
        return currentRuntime;
    }
    private Runtime() {}
    ...

}

Original: https://www.cnblogs.com/zhanghuaze/p/16562572.html
Author: 淡忘的江南
Title: 20220808-单例设计模式

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/615483/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Java死锁排查和Java CPU 100% 排查的步骤整理(转)

    工欲善其事,必先利其器 简介 本篇整理两个排查问题的简单技巧,一个是java死锁排查,这个一般在面试的时会问到,如果没有写多线程的话,实际中遇到的机会不多;第二个是java cpu…

    Java 2023年5月29日
    0115
  • Buuctf-Web-[ACTF2020 新生赛]Include

    前言 刷题网址:https://buuoj.cn/challenges#[ACTF2020 新生赛]Include 首先打开网页,提示 tips点击他,根据题目提示很难不想到是文件…

    Java 2023年6月13日
    0111
  • 设计模式之概述篇

    1、设计模式的本质 ​ 面向对象设计原则的实际运用,是对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理解。 2、设计模式的目的 ​ 提高代码可读性、重用性、可靠性、可…

    Java 2023年6月8日
    077
  • 国产时序数据库IotDB安装、与SpringBoot集成

    一.简介: 本文将完成一个真实业务中的设备上报数据的一个例子,完整的展示后台服务接收到设备上报的数据后,将数据添加到时序数据库,并且将数据查询出来的一个例子。本文所有代码已经上传G…

    Java 2023年6月13日
    0144
  • 深入理解Java虚拟机——垃圾收集算法

    深入理解Java虚拟机——垃圾收集算法 分代收集理论 当前商业虚拟机的垃圾收集器,大多数都遵循了”分代收集”(Generational Collection…

    Java 2023年5月29日
    090
  • 第一个微信小项目

    第一个好友分析: 我们需要用到wxpy这个库,这个库用到时会弹出一个二维码,这个二维码是通过扫码的方式登录微信,以获取信息 1 #导入模块 2 from wxpy import *…

    Java 2023年6月6日
    074
  • MybatisPlus——全网配置最全的代码生成器

    MybatisPlus代码生成器 这里讲解的是新版 (mybatis-plus 3.5.1+版本),旧版不兼容 官方文档:https://baomidou.com/(建议多看看官方…

    Java 2023年6月14日
    073
  • 算法转 Java 后端,2021秋招斩获腾讯、京东、百度等大厂 offer 面经分享!|JavaGuide|Guide哥

    这是一篇来自算法转Java后端的一位读者的投稿!文章主要分享了作者从迷茫崩溃到最终斩获腾讯、京东、百度等大厂 offer 的经历。文章内容很全面、真实,相信可以对正在准备面试的小伙…

    Java 2023年6月9日
    094
  • Axis1.4 调用.net服务出错

    1 出错描述: AxisFault faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Client faultSubcod…

    Java 2023年6月7日
    059
  • 03-Eureka注册中心

    1、介绍 2、快速开始 2.1 pom文件依赖

    Java 2023年6月7日
    072
  • 解决SpringBoot与web前端下划线与驼峰不同参数命名规则参数无法接收问题

    有时候我们前端参数名称用的下划线,但是后台接收一般都用驼峰命名,这样就会导致前端参数无法接收到问题 加个配置 这样就会自动转换接收了,但是后台返回给前端的也会变成下划线的参数命名方…

    Java 2023年5月30日
    0160
  • TCP协议分析工具TcpEngine V1.2.0使用教程

    概述 目前主流的网络数据分析工具主要有两类,一类是http协议分析工具,如fiddler,这类工具擅长对字符串类型协议分析;另一类是原始网络数据包的监听分析,如Wireshark,…

    Java 2023年6月5日
    084
  • 服务器内存故障预测居然可以这样做!

    作者:vivo 互联网服务器团队- Hao Chan 随着互联网业务的快速发展,基础设施的可用性也越来越受到业界的关注。内存发生故障的故障率高、频次多、影响大,这些对于上层业务而言…

    Java 2023年6月15日
    0107
  • 读经典【1】重构:改善既有代码的设计

    五星好评。很实用。 最近读了重构原版书,同时也在使用其中的一些技巧来改善工作中的项目,自己改完代码会有成就感。 这本书改变了我原有的思想钢印:代码能成功跑起来就不要去动它。实际上,…

    Java 2023年6月16日
    081
  • Netty

    学习本章需要先知道IO多路复用,不清楚的请移步:IO多路复用 网络通信中,阻塞IO两大阻塞的地方:socket链接阻塞,等待读取文件阻塞。 本地文件io就只有一个等待文件阻塞 一….

    Java 2023年6月7日
    0100
  • autocomplete=”off”清空输入框

    有过表单设计经验的朋友肯定知道,当我们在浏览器中输入表单信息的时候,往往input文本输入框会记录下之前提交表单的信息,以后每次只要双击 input文本输入框就会出现之前输入的文本…

    Java 2023年6月5日
    087
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球