《二十三种设计模式》通俗的创建型之单例设计模式

单例模式(Singleton Pattern)是Java最简单的设计模式之一。

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

保证一个类仅有一个实例,并提供一个访问它的全局访问点。

一个人只有一个嘴巴,当你说话时(调用方法时)永远只能使用一个嘴巴,如果不使用单例设计模式,每一次说话都会多出来一张嘴(实例化一个对象),这就不合理且占用资源

最基础

懒汉时懒汉两字就代表了一切,当真正用到时才临时泡佛脚

public class Singleton{
    private static singleton = null;
    public getSingleton(){
        if(singleton==null){
            singleton = new Singleton();
        }
        return singleton;
    }
    private Singleton(){
    //私有无参构造器,只允许内部调用
    }
}

我们可以看出,只有在使用时才会进行实例化,就是懒汉式

同上两字就代表了一切,加载时就实例化类

public class Singleton{
    private static singleton = new Singleton();
    public getSingleton(){
        return singleton;
    }
    private Singleton(){
    //私有无参构造器,只允许内部调用
    }
}

只要整个项目加载就会进行实例化,就想一个人饿了,不管三七二十一,先吃了再说

懒汉式不浪费内存,但线程不安全(多线程获取时,可能会示例话多个对象,因为可能有多个线程同时通过if判断)
饿汉式浪费内存,但线程安全

解决线程安全:

public class Singleton{
    static{
        singleton = new Singleton();
    }
    private static singleton;
    public getSingleton(){
        return singleton;
    }
    private Singleton(){
    //私有无参构造器,只允许内部调用
    }
}

为什么要使用静态块?
因为静态块只会在类加载时调用一次,详细见jvm底层

Original: https://www.cnblogs.com/microdream2/p/15365013.html
Author: MD&One-AR
Title: 《二十三种设计模式》通俗的创建型之单例设计模式

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

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

(0)

大家都在看

  • MyBatis(二)-CURD (ResultMap 一对一,一对多)

    1、insert 标签 1.1 获取SqlSessionFactory 对象的通用方法 方便后面分测试; //获取SqlSessionFactory 对象的通用方法 public …

    Java 2023年6月15日
    062
  • Makefile 简介

    一、引例: Makefile objects=test1.o test2.o main:$(objects) gcc -o main $(objects) clean: rm ma…

    Java 2023年6月5日
    081
  • Java集合专题总结(1):HashMap 和 HashTable 源码学习和面试总结

    2017年的秋招彻底结束了,感觉Java上面的最常见的集合相关的问题就是hash……系列和一些常用并发集合和队列,堆等结合算法一起考察,不完全统计,本人经历…

    Java 2023年5月29日
    077
  • Kotlin学习快速入门(9)—— 密封类的使用

    原文地址: Kotlin学习快速入门(9)—— 密封类的使用 – Stars-One的杂货小窝 代码逻辑中,很多时候我们会需要分支语句,来根据数据的情况走不同的处理逻辑…

    Java 2023年6月13日
    0104
  • Java Web Servlet 继承结构和生命周期

    Java Web Servlet 继承结构和生命周期 继承结构 继承关系如下图所示 抽象类Servlet有以下接口,其中init(),service(),destroy()三个主要…

    Java 2023年6月8日
    085
  • Oracle SQL Developer 安装

    参考资料 说在前面 什么是 SQL Developer? window 7 安装步骤 官方推荐配置 1 下载安装包 2 解压 3 启动 其他 1 如何找到其他版本的安装包下载页面?…

    Java 2023年6月9日
    090
  • Java基础常见知识&面试题总结(下)

    Java基础常见知识&面试题总结(下) 1.面向对象基础 1.1面向对象和面向过程的区别 两者的主要区别在于解决问题的方式不同: 面向过程把解决问题的过程拆成一个个方法,通…

    Java 2023年6月9日
    060
  • 【转】Nginx实现TCP反向代理

    Nginx在1.9.0版本发布以前如果要想做到基于TCP的代理及负载均衡需要通过打名为nginx_tcp_proxy_module的第三方patch来实现,该模块的代码托管在git…

    Java 2023年5月30日
    080
  • 带研发团队的日常思考2-项目老是延期该怎么处理

    这个问题老生常谈了,大部分互联网公司的项目都可能会遇到这样的问题,这里并不能给到大家一个具体的、彻底的、完美的解决方案,具体的项目、团队情况需要具体的分析,我这里记录一下遇到这种问…

    Java 2023年6月5日
    091
  • 分布式多级缓存(本地缓存,redis缓存)

    结构包: 使用案例: 实现效果: 1、基本并发的本地缓存,基于分布式轻量级锁的redis缓存 2、热缓存(高频访问持续缓存)+快速过期(本地缓存2秒,redis缓存10秒) 3、方…

    Java 2023年6月6日
    081
  • 5分钟了解Redis的内部实现快速列表(quicklist)

    在Redis3 .2版本之前,存储列表(list)数据结构使用的是压缩列表(ziplist)和链表(linkedlist),当列表元素个数比较少并且每个元素占用空间比较小的时候,使…

    Java 2023年6月7日
    085
  • 180_RabbitMQ高级-消息确认机制的配置

    消息确认机制的配置 消息确认机制的配置 :::infoNONE值是禁用发布确认模式,是默认值CORRELATED值是发布消息成功到交换器后会触发回调方法,如1示例SIMPLE值经测…

    Java 2023年6月7日
    092
  • html学习笔记

    结构化标准语言(HTML、XML) 表现标准语言(CSS) 行为标准(DOM、ECMAScript) 网页基本标签 标题标签:到 段落标签: 换行标签: 水平线标签: 字体样式标签…

    Java 2023年6月5日
    060
  • 国内三大地图(腾讯、高德、百度)路线规划功能的整合

    写在前面 基于导航到门店的需求,于是有了这一个随笔,例如一些社区团购,自提点导航的功能,同样适用的。 话不多说,开整 一、先定一个目标点(这个通常是通过接口获取的) 建议通过腾讯地…

    Java 2023年6月16日
    0164
  • 巧用自定义注解,一行代码搞定审计日志

    任何一个软件系统,都不可避免的会碰到【 信息安全】这个词,尤其是对于刚入行的新手,比如我,我刚入行的时候,领导让我做一个数据报表导出功能,我就按照他的意思去做,至于谁有权限操作导出…

    Java 2023年6月9日
    074
  • JAVA开发工具的具体安装与使用

    变量名:MYSQL_HOME 变量值:mysql安装路径 在点击path加入%MYSQL_HOME%\bin 最后命令窗口查看版本mysql –version 命令窗口…

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