1.饿汉模式(线程安全,调用效率高,但是不能延时加载):

package com.yanwu.www.demo;/** 测试单例模式* * 饿汉模式* * @author harvey* */public class SingletonDemo1 {//类初始化时立即加载对象(没有延迟加载的优势),天然的线程安全private static SingletonDemo1 instance=new SingletonDemo1(); //构造器私有化private  SingletonDemo1(){}//方法没有同步,调用效率高public static SingletonDemo1 getInstance(){return instance;}}

View Code

2.懒汉模式(线程安全,调用效率不高,但是能延时加载):

package com.yanwu.www.demo;/**测试单例模式**懒汉模式**@author harvey* */public class SingletonDemo2 {//类初始化时,不初始化这个对象(延时加载,真正用的时候再创建)private static SingletonDemo2 instance;//构造器私有化private SingletonDemo2(){}//方法同步,调用效率低public static synchronized SingletonDemo2 getInstance(){if(instance==null){instance=new SingletonDemo2();}return instance;}}

View Code

3.双重检测锁模式(由于JVM底层模型原因,偶尔会出问题,不建议使用):

package com.yanwu.www.demo;/** 单例模式* * 双重检测锁式* * 由于JVM底层内部模型原型,偶尔会出现问题,不建议使用* * @author harvey*/public class SingletonDemo5 {private volatile static SingletonDemo5 SingletonDemo5;private SingletonDemo5() {}public static SingletonDemo5 newInstance() {if (SingletonDemo5 == null) {synchronized (SingletonDemo5.class) {if (SingletonDemo5 == null) {SingletonDemo5 = new SingletonDemo5();}}}return SingletonDemo5;}}

View Code

4.静态内部类式(线程安全,调用效率高,可以延时加载):

package com.yanwu.www.demo;/** 单例模式* * 静态内部类的实现* * 1.外部类没有static 属性,不会像饿汉一样立即加载对象* * 2.只有真正调用getInstance()才会加载静态内部类,加载时是线程安全的* * 3.兼并延时调用和并发高效调用* * @author harvey* */public class SingletonDemo3 {private static class SingletonClassInstance{private static final SingletonDemo3 instance=new SingletonDemo3();}private SingletonDemo3(){}public static SingletonDemo3 getInstance(){return SingletonClassInstance.instance;}}

View Code

5.枚举类(线程安全,调用效率高,不能延时加载,可以天然的防止反射和反序列化调用):

package com.yanwu.www.demo;/** 单例模式* * 枚举式实现* * 1.避免了反射和反序列化的漏洞* * 2.没有延时加载的效果* * @author harvey*/public enum SingletonDemo4 {//枚举元素本身就是单例INSTANCE;//添加自己需要的操作public void singletonOperation(){}}

View Code

如何选用:

-单例对象 占用资源少,不需要延时加载,枚举 好于 饿汉

-单例对象 占用资源多,需要延时加载,静态内部类 好于 懒汉式

转载于:https://www.cnblogs.com/harvey2017/p/6942453.html

单例模式的5种实现方式相关推荐

  1. 单例模式的几种实现方式及优缺点

    参考:单例模式的几种实现方式及优缺点. 转载于:https://www.cnblogs.com/wenxiangchen/p/11343331.html

  2. python实现单例模式的几种方式_基于Python中单例模式的几种实现方式及优化详解...

    单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. ...

  3. Java单例模式的几种实现方式

    Java单例模式的几种实现方式 在Java 中,单例类只能有一个实例,必须创建自己的唯一实例,单例类必须给所有其他对象提供这一实例.Java 单例模式有很多种实现方式,在这里给大家介绍单例模式其中的几 ...

  4. python创建单例模式_Python单例模式的四种创建方式实例解析

    单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. ...

  5. 单例模式的四种实现方式(饿汉模式、懒汉模式、静态内部类、枚举类)

    首先,设计模式是我们程序员在软件开发过程中面临的一般问题的解决方案,通过学习设计模式可以使我们在编程时更加有条理性,同时培养我们写代码的思维能力,从而提高我们的工作效率.接下来就跟着博主的脚步往下走吧 ...

  6. 单例模式的几种实现方式详解以及原理

    单例模式介绍 前言 这是一个的萌新写的博客,以下是学习课程以后的总结,用于个人的复习与总结,如果有误还请多多包容和指正. 了解单例模式: 单例类只能有一个实例 单例必须创建自己的唯一一个实例 单例类必 ...

  7. 【无标题】单例模式的两种创建方式:饿汉式和懒汉式

    这里写自定义目录标题 单例模式的两种创建方式:饿汉式和懒汉式 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题,有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂 ...

  8. Java 单例模式常见五种实现方式

    定义 单例模式,属于创建类型的一种常用的软件设计模式. 单例模式最初的定义出现于<设计模式>(艾迪生维斯理, 1994):"保证一个类仅有一个实例,并提供一个访问它的全局访问点. ...

  9. Java23种设计模式之单例模式的五种实现方式、反射破解单例模式、不能破解枚举单例模式详解

    源码链接(Gitee码云):https://gitee.com/oldou/javadesignpatterns 这里有我整理好的Java23种设计模式的源码以及博客教程,博客教程中介绍了Java23 ...

  10. Java面试23种设计模式之单例模式的8种实现方式

    单例模式8中实现方式 1.单例模式介绍 2.单例模式的八种方式 3.饿汉式(静态常量),这种单例模式可用,可能造成内存浪费. 4.饿汉式(静态代码块),这种单例模式可用,可能造成内存浪费. 5.懒汉式 ...

最新文章

  1. 朱敏:40岁创业如何成就绝代明星?(五)
  2. 外部情况错综复杂,联想靠什么过「久日子」
  3. .Net软件UI界面测试自动化--UIAutomation技术
  4. dhtmlxTree 10分钟做一个树
  5. 《Web前端开发最佳实践》学习笔记
  6. redis系列:redis介绍与安装
  7. xcode cocos2dx 3.x mac工程 当assert(cond)触发断点,但cond却为0
  8. codeigniter index.php,CodeIgniter如何隐藏index.php | 学步园
  9. Waymo无人车卷入严重事故!车身损毁严重,安全员受轻伤
  10. TCP连接吞吐率和线路效率的总结
  11. 微软MCITP系列课程(二四)利用组策略部署软件
  12. 尚硅谷宋红康JVM资料笔记1 --- JVM与Java体系结构
  13. 辛弃疾《青玉案·元夕》
  14. 解决pip Could not fetch URL There was a problem confirming the ssl certificate: HTTPSConnectionPool问题
  15. 30岁,放弃国企稳定的工作,转行数据分析
  16. 计算机弹出虚拟U盘,怎么设置vmware虚拟机U盘启动
  17. AJAX读取Json文件
  18. response Headers字段详解
  19. 自学编程之路(自我记录)
  20. 【项目管理】项目选择与项目章程

热门文章

  1. console接口是干嘛的(console接口是干嘛的电信室外光猫)
  2. [转] 怎么固定KMPlayer窗口大小
  3. python done()什么意思_done什么意思
  4. 内存地址重映射的选项_ARM处理器重映射原理的分析与实现
  5. SQL中over用法大全
  6. 永洪科技怎么样_永洪科技面试总结--多位分享经验
  7. 淘宝测试开发实习总结
  8. 一款基于 Spring Boot 的公众号管理系统,已开源,别再自己写了!
  9. Xcelsius 使用XML做为数据源 ----利用ASP与数据库进行交互,即时刷新
  10. 全国移动短信信息中心号码查询大全