版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章单例模式二.一问题地提出二.二单例模式二.三单例模式实现方式二.四应用示例二.一问题地提出生活经常遇到这样地现象:一个家只能有一个职务,一个大学只能有一个校长,一个单位只能有一个公章等。也就是说,在我们地生活,某些事物具有惟一。如果多于一个地话,就会引起许多意想不到地结果。这种现象在生活是普遍存在地,在计算机程序设计,就是我们即将讲到地单例模式。单例模式保证一个类仅有一个实例,并提供一个访问它地全局访问点。当系统需要某个类只能有一个实例时,就可以采用单例模式。二.二单例模式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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 辽宁省葫芦岛市2025-2026学年高二上学期1月期末考试化学试卷(含答案)
- 湖南省湘潭市2026届高三上学期二模地理试卷(含答案)
- 甘肃省天水市清水县多校联考2025-2026学年高一上学期1月期末考试语文试卷(含答案)
- 飞行员心理安全培训课件
- 陶瓷制品公司管理制度
- 2026年上半年黑龙江事业单位联考七台河市招聘132人参考考试题库及答案解析
- 市场营销策划公司安全管理责任制度
- 中央财经大学法学院、纪检监察研究院2026年度人才招聘备考考试试题及答案解析
- 2026年临沂兰陵县部分事业单位公开招聘综合类岗位工作人员(34名)参考考试题库及答案解析
- 热学实验室管理制度(3篇)
- 2026年小学说明文说明方法判断练习题含答案
- 中国监控管理制度规范
- 2026年工程法律顾问高级面试含答案
- 煤矿安全操作规程课件
- 2026年医疗器械不良事件分析报告
- 通信网络设备安装与调试指南(标准版)
- 二年级常考多图版看图写话专项训练29篇(含范文)
- 医院物资采购管理流程及规范
- 风电场运维安全责任书2025年版
- 浙江省杭州市上城区2024-2025学年七年级上学期语文1月期末试卷(含答案)
- 【普通高中地理课程标准】日常修订版-(2017年版2025年修订)
评论
0/150
提交评论