论坛首页 编程语言技术论坛

单例模式

浏览 2295 次
锁定老帖子 主题:单例模式
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2018-03-15  

 

 三种单例模式:

 

public class Singleton2 {
 private static Singleton2 s;
 private Singleton2() {}
 
 static {
  s = new Singleton2();
 }
 
 public static Singleton2 getInstance() {
  return s;
 }
}

public class Singleton {
 private static Singleton s;
 private Singleton() {
  
 }
 
 public static synchronized Singleton getInstance() {
  if(s == null)
   s = new Singleton();
  return s;
 }
}

public class Singleton3 {
 private static class InSingle{
  private static final Singleton3 s = new Singleton3();
 }
 
 private Singleton3() {}
 public static final Singleton3 getInstance() {
  return InSingle.s;
 }
}

 

 

   发表时间:2018-03-17  
第一种方式是非常不好的方式,在项目中应绝对禁止。static 块中的Exception会转化为Error拋出,代码不会也不应该捕捉Error。所以基本上就是Crash。如果是多线程环境,则只会crash工作线程而整个进程还处理活动状态,使得监控程序难以监控到。

第二种加锁粒度太大,且不可测试。getInstance 模式都是不可测试的,也应禁止。

第三种本質与第一种相同。

0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics