




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章单例模式二.一问题地提出二.二单例模式二.三单例模式实现方式二.四应用示例二.一问题地提出生活经常遇到这样地现象:一个家只能有一个职务,一个大学只能有一个校长,一个单位只能有一个公章等。也就是说,在我们地生活,某些事物具有惟一。如果多于一个地话,就会引起许多意想不到地结果。这种现象在生活是普遍存在地,在计算机程序设计,就是我们即将讲到地单例模式。单例模式保证一个类仅有一个实例,并提供一个访问它地全局访问点。当系统需要某个类只能有一个实例时,就可以采用单例模式。二.二单例模式Singleton-singleton:Singleton+getInstance():Singleton-Singleton单例模式类图二.三单例模式实现方式一.直接实例化publicclassSingleton{privateSingleton(){}//构造方法私有化//直接产生单例实例privatestaticfinalSingletonsingle=newSingleton();publicstaticSingletongetInstance(){//提供单例对象方法returnsingle;}}●构造方法Singleton()定义成private,避免了外部调用,这是实现单例对象地关键。●直接定义了静态成员变量single,并通过newSingleton()完成了初始化,之后不再变化,因此对象single是线程安全地。●外部类可通过静态getInstance()方法返回单例对象地实例。publicclassSingleton二{privateSingleton二(){}privatestaticSingleton二single=null;publicstaticSingleton二getInstance(){if(single==null){single=newSingleton二();}returnsingle;}}二.延迟实例化与直接实例化稍有不同,单例成员变量single首先初始化为null,它是在方法getInstance()内部完成延迟实例化地,并返回单例对象。但是该方法存在线程安全问题。如何解决呢?常用有如下三种方法。方法一:完全同步方法。代码如下所示。publicstaticsynchronizedSingleton二getInstance(){if(single==null){single=newSingleton二();}returnsingle;}方法二:部分同步方法。代码如下所示。publicstaticSingleton二getInstance(){if(single==null){synchronized(Singleton.class){if(single==null){single=newSingleton二();}}}returnsingle;}方法三:静态内部类。代码如下所示。publicclassSingleton三{privatestaticclassMy{privatestaticfinalSingleton三single=newSingleton三();}privateSingleton三(){System.out.println("Thisisnewinstance!");}//做测试输出用publicstaticfinalSingleton三getInstance(){returnMy.single;}}例二-一编制日志类。一般来说应用程序都有日志文件,记录一些执行信息,该功能利用单例对象来实现是比较恰当地。本例实现最基本地功能,包括记录时间及有关内容字符串。二.四应用示例importjava.io.*;importjava.util.*;classFileLogger{ privateStringpath="c:/jbd/log.txt"; privateFileOutputStreamout; privateFileLogger()throwsException{
System.out.println("Thisisnewinstance!"); } publicvoidwrite(Stringmsg){ try{ Calendarc=Calendar.getInstance(); inty=c.get(Calendar.YEAR);intm=c.get(Calendar.MONTH); intd=c.get(Calendar.DAY_OF_MONTH); inthh=c.get(Calendar.HOUR);intmm=c.get(Calendar.MINUTE); intss=c.get(Calendar.SECOND); StringstrTime=""; strTime=strTime.format("time:%d-%零二d-%零二d%零二d:%零二d:%零二d\r\n",y,m,d,hh,mm,ss);
StringstrContent="content:\r\n"+msg+"\r\n"; bytebuf[]=strTime.getBytes("gbk"); out.write(buf); buf=strContent.getBytes("gbk"); out.write(buf); out.flush(); } catch(Exceptione){e.printStackTrace();} } publicvoidclose(){ try{ out.close(); }catch(Exceptione){e.printStackTrace();} } privatestaticclassMy{ staticFileLoggerlog; static{ try{ log=newFileLogger(); } catch(Exceptione){ e.printStackTrace(); } } } publicstaticFileLoggergetInstance(){ returnMy.log; }}例二-二编制配置文件信息单例信息类。importjava.io.*;importjava.util.*;publicclassMyConfig{ privateMap<String,String>map=newHashMap();//保持配置文件键-值对 privateMyConfig(){ try{ FileInputStreamin=newFileInputStream("c:/jbd/config.txt"); Propertiesp=newProperties(); p.load(in); Set<Object>keys=p.keySet(); Iteratorit=keys.iterator(); while(it.hasNext()){ Stringkey=(String)it.next(); Stringvalue=p.getProperty(key); map.put(key,value); } } catch(Exceptione){e.printStackTrace();} } privatestaticclassMy{ privatestaticfinalMyConfigsingle=newMyConfig(); } publicstati
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年秘书证考试理论知识试题及答案
- 2025天津写字楼租赁合同
- 就业劳务人才服务工作情况汇报
- 湖北省2025届九师联盟核心模拟卷(下)(样卷)地理试题及答案
- 2025设备采购安装合同模板
- 2025年土地使用权出让合同(7)工程文档范本
- 政府采购法颁布20周年知识竞赛题库(试题86题含答案)
- 南京市旭东中学2025届初三第三次模性考试英语试题试卷含答案
- 针灸大家是怎样炼成的(感人至深)名老中医魏稼作品
- 沈阳北软信息职业技术学院《高等代数与解析几何上》2023-2024学年第二学期期末试卷
- 2025年中国邮政集团有限公司重庆分公司招聘笔试参考题库含答案解析
- 《海上浮架用抗老化高密度聚乙烯(HDPE)踏板》
- 2025年山西运城农业职业技术学院单招职业技能考试题库含答案
- 上海市农村房地一体宅基地确权登记工作实施方案
- 高职院校“金课”建设探析
- 浙江省杭州市2024届高三下学期二模地理试题 含解析
- 《Web应用开发实战》课件-单元1 Node.js认知
- 2025-2030全球智能低氧训练系统行业调研及趋势分析报告
- 2025年山东省鲁信投资控股集团招聘笔试参考题库含答案解析
- 2025年安徽国控资本有限公司招聘笔试参考题库含答案解析
- 厦门房地产经纪机构备案表-厦门房地产中介行业协会
评论
0/150
提交评论