单例模式,即保证一个类最多只有一个实例化对象,并提供全局访问该对象的方法。

单例模式,有懒汉式和饿汉式两种经典的实现方式。

饿汉式:不管三七二十一,像一个饿汉一样,类加载的时候就事先实例化一个该类的对象。此后每次需要使用该单例时,都无需再new出对象,直接返回早已提前生成的那个唯一对象实例即可。饿汉式可能因生成无需被使用的对象而造成内存资源的浪费,但不会有线程安全的问题,实现逻辑较为简单。

代码如下:

public class HungrySingleTon {

private static final singleTonInstance = new HungrySingleTon();

private void hungrySingleTon() {

}

public HungrySingleTon getInstance {

return singleTonInstance;

}

}

懒汉式:非常懒惰地,只有在需要的时候才去尝试生成该类的实例化对象,如果发现对象尚未被生成,则new出对象后返回它;如果发现对象已经被生成了,则直接返回该唯一对象;懒汉式不会因为生成无需被使用的对象而造成内存资源的浪费,但需要考虑线程安全问题,实现逻辑较为复杂。

代码如下:

public class LazySingleTon{

private static valetile singleTonInstance = new LazySingleTon(); // 加valetile禁止指令重排序,防止了可能的空指针异常

private void hungrySingleTon() {

}

public LazySingleTon getInstance {

if(null == singleTonInstance) { // 只有对象尚未生成时,才需要加锁,这里提升了性能

syschronize(LazySingleTon.class) { // 锁,防止并发场景下多个线程同时去实例化对象

if(null == singleTonInstance) { // 双重检查

singleTonInstance = new LazySingleTon(); // 有指令重排序风险(1、分配内存空间;2、实例化对象;3、将对象指向该内存空间,若不加valetile,3步可能在2步之前执行)

}

}

}

return singleTonInstance;

}

}

拓荒牛系列一:单例模式相关推荐

  1. java设计模式系列:单例模式

    点击上方"好好学java",选择"置顶公众号" 优秀学习资源.干货第一时间送达! 好好学java java知识分享/学习资源免费分享 关注 精彩内容 java实 ...

  2. 设计模式系列之单例模式(java)

    2019独角兽企业重金招聘Python工程师标准>>> java中的单例模式实现起来最简单,应用也最广. java实现单例需要做到以下几点: 1. 构造方法私有化. 2.私有静态成员 ...

  3. java单例模式 uml_Java设计模式系列之单例模式

    单例模式的定义 一个类有且仅有一个实例,并且自行实例化向整个系统提供.比如,多程序读取一个配置文件时,建议配置文件时,建议配置文件封装成对象.会方便操作其中的数据,又要保证多个程序读到的是同一个配置文 ...

  4. JavaScript设计模式与开发实践系列之单例模式

    本系列为<JavaScript设计模式与开发实践>(作者:曾探)学习总结,如想深入了解,请支持作者原版 单例模式 实现单例模式 单例模式的定义是:保证一个类仅有一个实例,并提供一个访问它的 ...

  5. 【设计模式系列】--单例模式

    在前面的博文中,小编介绍了设计模式中的原型模式,不知道有没有帮助到有需要的小伙伴呢`(*∩_∩*)′,今天这篇博文,小编继续来介绍相关的设计模式,今天要和大家见面的是单例模式,不由得又让小编想起Dar ...

  6. 单例模式懒汉、饿汉和登记

    转载自  JAVA设计模式之单例模式 本文继续介绍23种设计模式系列之单例模式. 概念: java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记 ...

  7. 模式 - 收藏集 - 掘金

    设计模式 - 策略模式(strategy pattern) - 掘金 需求描述: 鸭子类(duck) 多个品种的鸭子(红头鸭,绿毛鸭,玩具鸭) 多种行为动作(呱呱叫,飞翔,外观展示) 如何设计呢? 普 ...

  8. 第四单元和课程总结:简单的架构设计意识

    一.第四单元架构设计总结 第一次作业 由于需要按名查找类图模型,于是建立"Class"类进行管理 由于方法具有参数导致类中存在二级结构,于是建立"Operation&qu ...

  9. Java设计模式博客全目录

    转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/40031567 今天来对这23种设计模式做个总结.咱使用设计模式的目的是为了可重用代码.让代 ...

最新文章

  1. 如何提取fasta文件的部分信息
  2. 来学习开发一个网页版马里奥小游戏吧
  3. java 数组map_java中 数组 list map之间的互转
  4. 3位格雷码的顺序编码_绝对值编码器当中的格雷码
  5. hive中如何控制mapper的数量
  6. pip install mysqlclient报错: error: command ‘gcc‘ failed with exit status 1 OSError: mysql_config no
  7. SAP Commerce web service 的扩展
  8. AUTOSAR从入门到精通100讲(三十八)-通信网络中的⽐特和帧同步技术
  9. 日本語趣味読み 一 星とり
  10. js 箭头函数没有 constructor,不能被new
  11. React学习(8)—— 高阶应用:不使用ES6、JSX实现React
  12. https无法访问 宝塔_解决宝塔面板开启自带免费Let's Encrypt SSL证书后网站无法访问...
  13. VS2005 + VSS2005 的方法
  14. vue移动端项目vant组件库之style内置样式
  15. pytracking系列跟踪算法的配置(LWL, KYS, PrDiMP, DiMP and ATOM Trackers)(Ubuntu版本)
  16. 面试产品经理 应该如何介绍自己的优势和劣势?
  17. SpringCloud Day05---服务网关(Gateway)
  18. 2018版USBASP烧录器改通用版教程
  19. 嵌入式系统开发笔记0_0:目录
  20. javascript合并多层级数组

热门文章

  1. (WPF)酷狗音乐播放器
  2. php验证码实现代码(3种)验证类
  3. 77种互联网盈利创新模式
  4. 断路器、单相电、三相电
  5. 微信小程序转为App并上架应用市场
  6. TypeScript保存代码时自动编译并运行
  7. code vs 集成tfs_Visual Studio TFS 团队项目和集合指南
  8. 【虚拟化】如何将虚拟机从workstation转换到esxi
  9. 西北工业大学大学物理(II)下2020-2021选填考题解析
  10. 可视化 | pyecharts之柱状图常用配置篇