拓荒牛系列一:单例模式
单例模式,即保证一个类最多只有一个实例化对象,并提供全局访问该对象的方法。
单例模式,有懒汉式和饿汉式两种经典的实现方式。
饿汉式:不管三七二十一,像一个饿汉一样,类加载的时候就事先实例化一个该类的对象。此后每次需要使用该单例时,都无需再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;
}
}
拓荒牛系列一:单例模式相关推荐
- java设计模式系列:单例模式
点击上方"好好学java",选择"置顶公众号" 优秀学习资源.干货第一时间送达! 好好学java java知识分享/学习资源免费分享 关注 精彩内容 java实 ...
- 设计模式系列之单例模式(java)
2019独角兽企业重金招聘Python工程师标准>>> java中的单例模式实现起来最简单,应用也最广. java实现单例需要做到以下几点: 1. 构造方法私有化. 2.私有静态成员 ...
- java单例模式 uml_Java设计模式系列之单例模式
单例模式的定义 一个类有且仅有一个实例,并且自行实例化向整个系统提供.比如,多程序读取一个配置文件时,建议配置文件时,建议配置文件封装成对象.会方便操作其中的数据,又要保证多个程序读到的是同一个配置文 ...
- JavaScript设计模式与开发实践系列之单例模式
本系列为<JavaScript设计模式与开发实践>(作者:曾探)学习总结,如想深入了解,请支持作者原版 单例模式 实现单例模式 单例模式的定义是:保证一个类仅有一个实例,并提供一个访问它的 ...
- 【设计模式系列】--单例模式
在前面的博文中,小编介绍了设计模式中的原型模式,不知道有没有帮助到有需要的小伙伴呢`(*∩_∩*)′,今天这篇博文,小编继续来介绍相关的设计模式,今天要和大家见面的是单例模式,不由得又让小编想起Dar ...
- 单例模式懒汉、饿汉和登记
转载自 JAVA设计模式之单例模式 本文继续介绍23种设计模式系列之单例模式. 概念: java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记 ...
- 模式 - 收藏集 - 掘金
设计模式 - 策略模式(strategy pattern) - 掘金 需求描述: 鸭子类(duck) 多个品种的鸭子(红头鸭,绿毛鸭,玩具鸭) 多种行为动作(呱呱叫,飞翔,外观展示) 如何设计呢? 普 ...
- 第四单元和课程总结:简单的架构设计意识
一.第四单元架构设计总结 第一次作业 由于需要按名查找类图模型,于是建立"Class"类进行管理 由于方法具有参数导致类中存在二级结构,于是建立"Operation&qu ...
- Java设计模式博客全目录
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/40031567 今天来对这23种设计模式做个总结.咱使用设计模式的目的是为了可重用代码.让代 ...
最新文章
- 如何提取fasta文件的部分信息
- 来学习开发一个网页版马里奥小游戏吧
- java 数组map_java中 数组 list map之间的互转
- 3位格雷码的顺序编码_绝对值编码器当中的格雷码
- hive中如何控制mapper的数量
- pip install mysqlclient报错: error: command ‘gcc‘ failed with exit status 1 OSError: mysql_config no
- SAP Commerce web service 的扩展
- AUTOSAR从入门到精通100讲(三十八)-通信网络中的⽐特和帧同步技术
- 日本語趣味読み 一 星とり
- js 箭头函数没有 constructor,不能被new
- React学习(8)—— 高阶应用:不使用ES6、JSX实现React
- https无法访问 宝塔_解决宝塔面板开启自带免费Let's Encrypt SSL证书后网站无法访问...
- VS2005 + VSS2005 的方法
- vue移动端项目vant组件库之style内置样式
- pytracking系列跟踪算法的配置(LWL, KYS, PrDiMP, DiMP and ATOM Trackers)(Ubuntu版本)
- 面试产品经理 应该如何介绍自己的优势和劣势?
- SpringCloud Day05---服务网关(Gateway)
- 2018版USBASP烧录器改通用版教程
- 嵌入式系统开发笔记0_0:目录
- javascript合并多层级数组