java单例模式

  • 1、什么是单例模式
    • 1.1、介绍
    • 1.2、如何实现单例模式
  • 2、饿汉式
  • 3、懒汉式
  • 4、饿汉式 VS 懒汉式

1、什么是单例模式

1.1、介绍

  1. 所谓的单例模式就是指一个类在整个应用程序中只能出现一个对象实例
  2. 单例的实现方法有两种
    • 饿汉式
    • 懒汉式

1.2、如何实现单例模式

实现单例模式大致可分为三个步骤

  1. 私有化构造器 ===>防止被new
  2. 在类内部创建对象
  3. 对外暴露一个静态方法.用于获取对象示例

2、饿汉式

public class SingletonPattern {public static void main(String[] args) {//测试饿汉模式EagerSingleton eagerSingleton01=EagerSingleton.getEagerSingleton();EagerSingleton eagerSingleton02=EagerSingleton.getEagerSingleton();//因为类没有重写toString方法所以会打印地址值System.out.println("eagerSingleton01:"+eagerSingleton01);System.out.println("eagerSingleton02:"+eagerSingleton02);
//        结果:
//        eagerSingleton01:EagerSingleton@1b6d3586
//        eagerSingleton02:EagerSingleton@1b6d3586}
}
//步骤[单例模式-饿汉式]
//1. 将构造器私有化
//2. 在类的内部直接创建对象(该对象是 static)
//3. 提供一个公共的 static 方法,返回对象
class EagerSingleton{private static EagerSingleton eagerSingleton=new EagerSingleton();public static EagerSingleton getEagerSingleton(){return eagerSingleton;}
}

3、懒汉式

public class SingletonPattern {public static void main(String[] args) {//测试饿汉模式LazySingleton lazySingleton01=LazySingleton.getLazySingleton();LazySingleton lazySingleton02=LazySingleton.getLazySingleton();//因为类没有重写toString方法所以会打印地址值System.out.println("lazySingleton01:"+lazySingleton01);System.out.println("lazySingleton02:"+lazySingleton02);
//        结果:
//        lazySingleton01:LazySingleton@1b6d3586
//        lazySingleton02:LazySingleton@1b6d3586}
}
//步驟[单例模式-懒汉式]
//1.构造器私有化
//2.定义一个static的对象
//3.提供一个 public 的 static 方法,可以返回一个懒汉式对象
//4.懒汉式,只有当用戶使用 getInstance 时,才返回对象, 后面再次调用,会返回上次创建的对象
class LazySingleton{private static LazySingleton lazySingleton;public static LazySingleton getLazySingleton(){if(lazySingleton==null){lazySingleton=new LazySingleton();}return lazySingleton;}
}

4、饿汉式 VS 懒汉式

  1. 二者最主要的区别在于创建对象的时机不同:饿汉式是在类加载就创建了对象实例,而懒汉式是在使用时才创建。
  2. 饿汉式不存在线程安全问题,懒汉式存在线程安全问题。
  3. 饿汉式存在浪费资源的可能。因为如果程序员一个对象实例都没有使用,那么饿汉式.二者最主要的区别在于创建对象的时机不同:饿汉式是在类加载就创建了对象实例,而懒汉式是在使用时才创建。就不存在这个问题了

java单例模式[附代码实现]相关推荐

  1. 观察者模式/ java实现附代码 /

    /注:场景和例子引用github上的设计模式.传送门:https://github.com/iluwatar/java-design-patterns/tree/master/observer 场景: ...

  2. java中自造类是什么意思_Java建造者模式是什么?如何实现?(附代码)

    本篇文章给大家带来的内容是关于Java建造者模式是什么?如何实现?(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 建造者模式 一.什么是建筑者模式? 建造者模式(Build ...

  3. Java中集成极光推送实现给Android提送消息通知(附代码下载)

    场景 Android中集成极光推送实现推送消息通知与根据别名指定推送附示例代码下载: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details ...

  4. Java SE有几个代码_JavaSE常用类及方法的介绍(附代码)

    本篇文章给大家带来的内容是关于JavaSE常用类及方法的介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.基本数据类型比较用:== 2.引用数据类型比较用:equal ...

  5. java 递归_采用递归算法求解迷宫问题(Java版) | 附代码+视频

    递归算法能够解决很多计算机科学问题,迷宫问题就是其中一个典型案例.本篇教程我们将采用递归算法求解迷宫问题,输出从入口到出口的所有迷宫路径. 01 用递归算法解决迷宫问题 迷宫问题在<数据结构教程 ...

  6. java乘法表_Java中四种9*9乘法表的实现方式(附代码)

    前言: 初学java,实现99乘法表是必学必会的内容. 需求 : 分别写出上下左右,对应四个角的乘法表. 思路: 可以先打印出*星星,形成一个直角三角形,然后再替换成乘法公式. 代码如下: publi ...

  7. java中对象类型转换_Java中的对象的类型转换介绍(附代码)

    本篇文章给大家带来的内容是关于Java中的对象的类型转换介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 向上转型:子类对象转为父类,父类可以是接口.公式:Father ...

  8. 知识库递归编程java和prolog代码;逻辑语言Prolog简介(附24555字PDF发“递归prolog简介”下载)

    知识库递归编程java和prolog代码:逻辑语言Prolog简介(附24555字PDF发"递归prolog简介"下载) 数据简化DataSimp 今天 数据简化DataSimp导 ...

  9. java 发邮件 新浪,发邮件时终于可以通过sina的smtp验证了(附代码)

    发邮件时终于可以通过sina的smtp验证了(附代码) 时间:2006/7/19 5:35:34 作者:佚名 人气:64 import javax.mail.*; import javax.mail. ...

  10. Java Web实现登录注册(超详细附代码)

    Java Web实现登录注册(超详细附代码) 文章目录 Java Web实现登录注册(超详细附代码) 1.前言 2.登录注册设计流程 3.注册的数据流程 4.登录的数据流程 5.部分代码的展示 5.1 ...

最新文章

  1. 算法----单词拆分
  2. 第 14 章 Networking
  3. Android7.1图标快捷方式(AppShortcuts)实现Demo
  4. 修复SQL Server Compact数据库时遇到找不到指定的模块的异常
  5. 齐家网困境:进退两难,合作方和消费者两头都不讨好?
  6. 机器学习中的不平衡分类方法(part4)--朴素贝叶斯分类器
  7. 硬件:固态硬盘SSD的基础知识及安装注意事项!
  8. nssl1437-逮虾户【二分答案】
  9. word取消下一页_word文档页码设置及文中小箭头清除办法
  10. please reinstall the mysql distribution_php安装扩展mysqli的实现步骤及报错解决办法
  11. 在Eclipse中运行JAVA代码远程操作HBase的示例
  12. zabbix-server添加了网络设备模板导致boot.log占满根目录不能ssh登陆
  13. 数学建模常用算法汇总及python,MATLAB实现(七) —— sklearn和SPSS实现主成分分析
  14. sql语句优化的几种方法
  15. 干货!10分钟,用Python生成图文并茂的PDF报告!
  16. 跨平台数据库ODB实战3-Person类的存储、查询、更新和删除
  17. [translate]Multimodal Self-Paced Learning for Multi-Omics Feature Selection and Data Integration
  18. 我真的不懂微信营销(一)
  19. LZW算法原理及实现
  20. 如何部署SSM框架(Spring+SpringMVC+MyBatis)到SAE(新浪云服务器)图文教程

热门文章

  1. 2021年 win10 Flash 不可用解决方法
  2. Android 声音采集回声与回声消除
  3. 按键精灵手机助手界面三级联动
  4. HBase 安装配置及下载地址
  5. Instagram使用教程
  6. 软件开发模式之敏捷开发(scrum)
  7. 子网掩码换算 - 在线工具
  8. 备战数学建模41-蒙特卡罗模拟(攻坚战5)
  9. 大芒果 mysql 断开_大芒果3.3.5进入显示 与服务器断开连接
  10. ZZULIOJ:1001: 整数a+b