设计模式单例模式.pptxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第2章 单例模式2.1问题的提出2.2单例模式2.3单例模式实现方式2.4应用示例2.1问题的提出生活中经常遇到这样的现象:一个国家只能有一个主席职务,一个大学只能有一个校长,一个单位只能有一个公章等。也就是说,在我们的生活中,某些事物具有惟一性。如果多于一个的话,就会引起许多意想不到的结果。这种现象在生活中是普遍存在的,在计算机程序设计中,就是我们即将讲到的单例模式。Singleton-singleton:Singleton2.2单例模式-Singleton+getInstance():Singleton单例模式保证一个类仅有一个实例,并提供一个访问它的全局访问点。当系统需要某个类只能有一个实例时,就可以采用单例模式。单例模式类图2.3单例模式实现方式1.直接实例化public class Singleton { private Singleton() {} //构造方法私有化 //直接产生单例实例 private static final Singleton single = new Singleton(); public static Singleton getInstance() {//提供单例对象方法 return single; } } ●构造方法Singleton()定义成private,避免了外部调用,这是实现单例对象的关键。●直接定义了静态成员变量single,并通过new Singleton()完成了初始化,之后不再变化,因此对象single是线程安全的。●外部类可通过静态getInstance()方法返回单例对象的实例。2.延迟实例化public class Singleton2 { private Singleton2() {} private static Singleton2 single=null; public static Singleton2 getInstance() { if (single == null) { single = new Singleton2(); } return single; } } 与直接实例化稍有不同,单例成员变量single首先初始化为null,它是在方法getInstance()内部完成延迟实例化的,并返回单例对象。但是该方法存在线程安全问题。 如何解决呢?常用有如下三种方法。方法1:完全同步方法。代码如下所示。 public static synchronized Singleton2 getInstance() { if (single == null) { single = new Singleton2(); } return single; }方法2:部分同步方法。代码如下所示。 public static Singleton2 getInstance() { if (single == null) { synchronized (Singleton.class) { if (single == null) { single = new Singleton2(); } } } return single; } 方法3:静态内部类。代码如下所示。public class Singleton3 { private static class My { private static final Singleton3 single = new Singleton3(); }private Singleton3 (){System.out.println(“This is new instance!”);}//做测试输出用 public static final Singleton3 getInstance() { return My.single; }}2.4应用示例【例2-1】编制日志类。一般来说应用程序都有日志文件,记录一些执行信息,该功能利用单例对象来实现是比较恰当的。本例实现最基本的功能,包括记录时间及相关内容字符串。import java.io.*;import java.util.*;class FileLogger{ private String path=c:/jbd/log.txt; private FileOutputStream out; private FileLogger()throws Exception{ System.out.println(This is new instance!); } public void write(String msg){ try{ Calendar c = Calendar.getInstance(); int y=c.g

文档评论(0)

173****0166 + 关注
实名认证
文档贡献者

临床医师执业资格证持证人

医学资料整理

领域认证该用户于2023年01月12日上传了临床医师执业资格证

1亿VIP精品文档

相关文档