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文件的创建时,发现测试的demo不能输出中文,查看了系统设置之后,是因为系统的编码设置是默认的,为此我们要将编码设置为UTF…

    Java 2023年6月13日
    074
  • 详解JS中 call 方法的实现

    摘要:本文将全面的,详细解析call方法的实现原理 本文将全面的,详细解析call方法的实现原理,并手写出自己的call方法,相信看完本文的小伙伴都能从中有所收获。 call 方法…

    Java 2023年6月15日
    080
  • javaweb学生管理系统 第一次总结

    JavaWeb 学生管理系统 第一次总结 ; 具备的知识 java se 高级数据库jsselvetEl表达式jsp 项目 目录结构 [外链图片转存失败(img-dfQq8aOt-…

    Java 2023年6月8日
    092
  • 【设计模式】Java设计模式-模板模式

    Java设计模式 – 模板模式 😄 不断学习才是王道🔥 继续踏上学习之路,学之分享笔记👊 总有一天我也能像各位大佬一样🏆原创作品,更多关注我CSDN: 一个有梦有戏的人…

    Java 2023年6月16日
    085
  • RabbitMQ单机部署指南

    1.1.下载镜像 方式一:在线拉取 docker pull rabbitmq:3.8-management 方式二:从本地加载 上传到虚拟机中后,使用命令加载镜像即可: docke…

    Java 2023年6月7日
    073
  • 自己动手实现java数据结构(九) 跳表

    跳表介绍 在之前关于数据结构的博客中已经介绍过两种最基础的数据结构:基于连续内存空间的向量(线性表)和基于链式节点结构的链表。 有序的向量可以通过二分查找以logn对数复杂度完成随…

    Java 2023年6月8日
    089
  • 七、注释、标识符、数据类型与类型转换

    书写注释是一个好习惯 public class Comment { public static void main(String[] args) { //单&…

    Java 2023年6月5日
    082
  • 33岁程序员的年中总结

    人生在不同的阶段会有不同的生活方式和思考问题的角度,这是一件非常有趣的事~ 比如,我在 22 岁会想:怎么才能赚大钱,怎么才能升值加薪? 在 25 岁会想:去哪买房?什么时候结婚?…

    Java 2023年5月29日
    086
  • JVM学习 类加载子系统

    JVM 哔哩哔哩 尚硅谷视频 宋红康老师 Java代码执行流程 简图 详细图 1、类加载子系统 类加载器子系统的作用 类加载器子系统负责从文件系统或者网络中加载Class文件,cl…

    Java 2023年6月16日
    083
  • 西安纵横资讯×JNPF:适配中国企业特色,全面集成费用管控体系

    费用管理是企业财务治理的重要模块,尤其需要一套现代化的作业体系支撑。”财务审核周期长,处理报销慢、分支机构分散、费用难以统一标准化管理”等棘手问题是企业数字…

    Java 2023年6月5日
    082
  • Spring Cloud Gateway 自定义断言(Predicate)

    1、类必须是Spring组件 Bean 2、类必须加上RoutePredicateFactory作为结尾 3、类必须继承AbstractRoutePredicateFactory …

    Java 2023年5月30日
    066
  • 10分钟搞定让你困惑的 Jenkins 环境变量

    前言 Jenkins, DevOps 技术栈的核心之一,CI/CD 离不开编写 Pipeline 脚本,上手 Jenkins ,简单查一下文档,你就应该不会被 agent,stag…

    Java 2023年6月5日
    071
  • 2、String类

    常用方法 equals // 区分大小写,判断内容是否相等 equalsIgnoreCase // 忽略大小写的判断内容是否相等 length //获取字符的个数,字符串的长度 i…

    Java 2023年6月7日
    089
  • Lambda表达式简介

    1、什么是Lambda? Lambda就是一个匿名函数。 2、为什么要使用Lambda? 使用Lambda表达式可以对一个接口进行非常简洁的实现(如下图,分别是三种方式实现接口的对…

    Java 2023年6月15日
    078
  • 通过Nginx获取用户真实IP

    nginx配置 如上面配置,接口需要使用的时候获取X-real-ip就可以,但是经过测试以后,发现X-real-ip并不是真实的用户IP,而是Nginx代理服务器的IP,原因就是经…

    Java 2023年5月30日
    091
  • Oracle 查看哪个表被锁定,并获取对应的sessionID

    SELECT A.OWNER,A.OBJECT_NAME,B.XIDUSN,B.XIDSLOT,B.XIDSQN,B.SESSION_ID,B.ORACLE_USERNAME,B….

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