常见的五种单例模式实现方式

--主要:

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

懒汉式(线程安全,调用效率低,但是可以延时加载)

--其他:

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

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

  枚举式(线程安全,调用效率高,不能延时加载)

-- 如何选用?

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

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

引用:http://blog.csdn.net/jq_ak47/article/details/54894793

http://www.cnblogs.com/hupp/p/4487521.html

时间: 2024-11-10 16:54:03

常见的五种单例模式实现方式的相关文章

五种单例模式实现

核心作用: 保证一个类只有一个实例,并向外提供一个访问该实例的访问点. 常见场景: 数据库连接池的设计一般也是单例模式 在Servlet编程中,每个Servlet也是单例模式 在Spring中,默认创建的bean也是单例模式 ...... 优点: 1.由于每个类只创建一个实例,大大减少了内存的开销. 2.单例模式提供全局访问点,可以实现共享资源访问. 常见的五种单例模式实现方法: 饿汉式(线程安全,效率高,不能延迟加载) 懒汉式(线程安全,效率不高,可以延迟加载) DCL懒汉式(线程安全,效率还

js 跨域问题常见的五种解决方式

一.什么是跨域? 要理解跨域问题,就先理解好概念.跨域问题是由于javascript语言安全限制中的同源策略造成的. 简单来说,同源策略是指一段脚本只能读取来自同一来源的窗口和文档的属性,这里的同一来源指的是主机名.协议和端口号的组合. URL 说明 是否允许通信 http://www.a.com/a.js http://www.a.com/b.js 同一域名下 允许 http://www.a.com/lab/a.js http://www.a.com/script/b.js 同一域名下不同文件

android五种数据存储方式

在Android中提供了如下五种数据存储方式: SharedPreferences 文件存储 SQLite数据库方式 内容提供器(ContentProvider) 网络存储 下面具体介绍一下这五种数据存储方式的用法. 1. SharedPreferences SharedPreferences是android平台上的一个轻量级存储类,主要保存一些常用的配置信息.可以保存long.int.String类型数据. SharedPreferences以键值对方式读取和存入,最终会以XML方式保存数据,

五种单例模式

今天算是完完整整把老高的单例模式看了,差不多也懂了,个别不懂的再补吧,下面介绍一下5种单例模式: 饿汉式实现:线程安全,调用效率高.但是,不能延时加载. 懒汉式实现:线程安全,调用效率不高.但是,可以延时加载. 双重检测锁式:由于JVM底层内部模型原因,偶尔会出现问题,不建议使用. 静态内部类式:线程安全,调用效率高,可以延时加载. 枚举式:线程安全,调用效率高.但是,不能延时加载(避免反射和反序列化的漏洞). 以下先介绍一下5种单例模式: 饿汉式实现: /** *单例模式:饿汉模式 *线程安全

Java中的五种单例模式实现方法

[代码] Java中的五种单例模式实现方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 package s

常见的几种单例模式写法

单例模式:是一种常用的软件设计模式,在它的核心结构中值包含一个被称为单例的特殊类.一个类只有一个实例,即一个类只有一个对象实例. 对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务:售票时,一共有100张票,可有有多个窗口同时售票,但需要保证不要超售(这里的票数余量就是单例,售票涉及到多线程).如果不是用机制对窗口对象进行唯一化将弹出多个窗口,如果这些窗口显示的都是相同的内容,重复创建就会浪费资源. 应用场景(来源:<大话设计模式>)

axis2五种创建服务方式的比较

AXIOM:Axis2 Object Model,Axis2对象模型 Axis2 对象模型(AXIs2 Object Model,AXIOM)是 Axis2 的基础,任何 SOAP 消息在 Axis2 中都表示为 AXIOM.AXIOM 相对于其他 XML 表示形式的优势在于,它基于 pull 解析器技术,而其他大多数则基于 push 解析器技术.pull 与 push 的主要不同之处在于,在 pull 技术中,调用者对解析器具有完全控制权,可以要求下一个事件:而对于 push,当要求解析器继续

HTML5 Web 客户端五种离线存储方式汇总

最近折腾HTML5游戏需要离线存储功能,便把目前可用的几种HTML5存储方式研究了下,基于HT for Web写了个综合的实例,分别利用了Cookie.WebStorage.IndexedDB以及FileSystem四种本地离线存储方式,对燃气监控系统的表计位置.朝向.开关以及表值等信息做了CURD的存取操作. HTML5的存储还有一种Web SQL Database方式,虽然还有浏览器支持,是唯一的关系数据库结构的存储,但W3C以及停止对其的维护和发展,所以这里我们也不再对其进行介绍:Bewa

javaScript常见的五种数组去重(转载)

JavaScript的数组去重问题在许多面试中都会遇到,现在做个总结 先来建立一个数组 var arr = [1,2,3,3,2,'我','我',34,'我的',NaN,NaN]; ▓▓▓▓▓▓ 第一种 思路:建立一个临时数组,用for循环去依次判断arr中的每个项在临时数组中是否有相同的值,如果没有则将这个值添加到临时数组,如果有相同的值则不添加,最后返回这个临时数组 代码: 1 Array.prototype.removeDuplicate = function(){ 2 var n = [