- 1、本文档共20页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
设计模式与系列之单例模式
Copyright 2008, GBCOM Communication Technology 中国自主知识产权 设计模式系列之单例模式 Shanghai GBCOM Communication Technology Co.,Ltd Production Technology | 2008 Copyright 2008, GBCOM Communication Technology 部门:网管组 姓名:苏越嘉 日期:2012-3-27 单例Singleton模式概念 概念: 作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 单例的要点 某个类能有一个实例 它必须自行创建这个实例 它必须向整个系统提供这个实例 客户甲 客户乙 客户丙 单例对象 单例在生活中的例子 Window中的例子—回收站 思考回收站如何符合单例的3要点? 某个类能有一个实例 一个win系统只有一个回收站. 它必须自行创建这个实例 回收站不需要我们来创建,系统会自己创建. 它必须向整个系统提供这个实例 我们删除的东西都会放入这个回收站实例 单例形式之饿汉式单例 Public class EagerSingleton{ Private static final EagerSingleton m_instance = new EagerSingleton(); /* * 私有的默认构造方法 */ private EagerSingleton(){} /* * 静态工厂方法 */ public static EagerSingleton getInstance(){ return m_instance; } } 类被加载时,静态变量m_instance就会被初始化,私有构造方法会被调用,单例的唯一实例就被创建出来了. 单例形式之懒汉式单例 Public class LazySingleton{ Private static LazySingleton m_instance = null; /* * 私有的默认构造方法 */ private LazySingleton(){} /* * 静态工厂方法 */ synchronized public static LazySingleton getInstance(){ if(m_instance == null) m_instance = new LazySingleton(); return m_instance; } } 懒汉单例在第一次被引用的时候实例化. 单例形式之懒汉饿汉式比较 懒汉单例 饿汉单例 资源利用 速度与反应 双重检查成例研究 成例是一种代码层次上的模式,是在比设计模式的更次更具体饿层次上的代码技巧. 双重检查成例(Double Check Idiom)是从C语言移植过来的一种代码模式.在C语言里,双重检查成例常常用在多线程环境中类得晚实例化里 单线程对象实例例子 private Foo foo = null; public static Foo getInstance(){ if(foo == null){ foo = new Foo(); } return foo; } 该例子在多线程环境下是不安全的!为什么? 双重检查成例研究 线程安全的例子 private Foo foo = null; public synchronized static Foo getInstance(){ if(foo == null){ foo = new Foo(); } return foo; } synchronized修饰符保证了该方法访问的独占性,虽然加锁颗粒度较大,性能有所降低.但是保证了线程的安全性. 双重检查成例研究 为了使代码增加性能,减小加锁的颗粒度,于是就有了双重检查成例的设计. Public class LazySingleton{ Private LazySingleton instance= null; Private LazySingleton (){} Public static LazySingleton getInstance(){ if(instance == null){//第一次检查的位置(位置1) //多个线程会到达这(位置2) synchronized(LazySingleton.class){ //只有一个线程达到这(位置3) if(foo == n
您可能关注的文档
- 西方经济与学微观部分 .ppt
- 西方经济与学第一次讨论 .ppt
- 西方经济与学第七讲 市场理论 .ppt
- 西方微观与经济学5 .ppt
- 西方行政与制度课件 .ppt
- 西方经济与学阶段性练习3 .ppt
- 西峡项目与初步策划方案 .ppt
- 西方哲学与智慧第02讲论证 .ppt
- 西方经济与学:生产理论 .ppt
- 西溪天堂与项目概念推广提案 .ppt
- 《GB/Z 44363-2024致热性 医疗器械热原试验的原理和方法》.pdf
- GB/T 16716.6-2024包装与环境 第6部分:有机循环.pdf
- 中国国家标准 GB/T 44376.1-2024微细气泡技术 水处理应用 第1 部分:亚甲基蓝脱色法评价臭氧微细气泡水发生系统.pdf
- 《GB/T 44376.1-2024微细气泡技术 水处理应用 第1 部分:亚甲基蓝脱色法评价臭氧微细气泡水发生系统》.pdf
- GB/T 44376.1-2024微细气泡技术 水处理应用 第1 部分:亚甲基蓝脱色法评价臭氧微细气泡水发生系统.pdf
- 中国国家标准 GB/T 44315-2024科技馆展品设计通用要求.pdf
- GB/T 44305.2-2024塑料 增塑聚氯乙烯(PVC-P)模塑和挤塑材料 第2部分:试样制备和性能测定.pdf
- 《GB/T 44315-2024科技馆展品设计通用要求》.pdf
- GB/T 44315-2024科技馆展品设计通用要求.pdf
- GB/T 39560.9-2024电子电气产品中某些物质的测定 第9 部分:气相色谱-质谱法(GC-MS)测定聚合物中的六溴环十二烷.pdf
文档评论(0)