设计模式-单例式-java.docVIP

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
设计模式-单例式-java

设计模式之---单例模式 单例模式是比较简单、也是很常用的一种模式 需要做注意的问题全在代码中注释了 另外,使用枚举类型来实现单例模式是一种比较新奇的办法 package mode.singleton; /** * 单例模式,这种写法属于 饿汉式单例模式 * * 饿汉式单例模式,属于刚加载类的时候就创建一个对象出来,而不管这个对象以后会不会用的到 * 如果以后这个对象没有用到(极小概率),就会造成空间浪费 * 属于典型的 用空间换时间 * * @author root * */ public class SingletonHungrey { private static SingletonHungrey instance = new SingletonHungrey(); /** *上面一句话也可以这么写: * * private static SingletonHungrey instance = null; * * static{ * instance = new SingletonHungrey(); * } * */ private SingletonHungrey(){} public static SingletonHungrey getInstance(){ return instance; } } package mode.singleton; /** * 这种写法叫做 懒汉式 单例模式 * 懒汉式单例模式,就是加载类的时候不创建对象,而是在用到这个对象的时候,判断为空才去创建一个对象 * 这么着,如果后来没有用到这个对象(极小概率),那么就会节省空间。但是每次取对象就会判断一次,则会浪费一些性能 * 并且使用了synchronized同步方法以后,多线程也会被顺序执行 * 这种属于典型的用时间换取空间 * * * @author root * */ public class SingletonLazy { private static SingletonLazy instance = null; private SingletonLazy(){} /** * 这种方式再多线程下会有问题,比如 下面的情况, * 加入线程A已经经过了if判断,但是还没有来得及创建对象,而同时线程B正在if判断或者也过了判断, * 那么这种情况就会 造成 创建两个对象,就不是单例模式了。 * * 如果只是取一个对象,错误还不算很严重,但如果这是一个缓存,就会引发严重的错误,而这种错误是很难发觉的 * * 所以,保险起见,我们应该对该方法同步,即 getInstance2 * * @return */ public static SingletonLazy getInstance(){ if(instance == null){//多线程问题:线程B走到这 // 多线程问题 : 线程A 走到这里 instance = new SingletonLazy(); } return instance; } /** * 经过同步以后的方法,不会出现线程安全问题 * @return */ public static synchronized SingletonLazy getInstance2(){ if(instance == null){ instance = new SingletonLazy(); } return instance; } } package mode.singleton; /** * 懒汉式 单例模式 和饿汉式单例模式 都有各自的优点和缺点,那么能不能综合起来,创建一个比较完美的解决方案呢? * 还真有高人想出来了。 * * 通过分析,我们知道,饿汉式唯一的缺点就是可能会浪费一点空间,虽然是极小概率,但是我们还是想要避免。 * 那么怎么才能让别人在用到这个类的时候在创建对象呢? * * ....... * * * 就是使用内部类!使用内部类来达到推迟创建的目的 * * @author root * */ public class SingletonPerfect { private SingletonPerfect(){} /** * 使用这种静态内部类,我们就可以在外部使用这个单例类的时候再去创建对象,即节省了空间,又节省了时间

文档评论(0)

shi194121 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档