`

单例几种常见的形式

    博客分类:
  • java
 
阅读更多

原文地址:http://forestqqqq.iteye.com/blog/1896723

一,饿汉式单例

Java代码   收藏代码
  1. //饿汉式单例1  
  2. public class Singleton1 {  
  3.     private static final Singleton1 instance = new Singleton1();  
  4.     private Singleton1(){}  
  5.     public static Singleton1 getInstance(){  
  6.         return instance;  
  7.     }  
  8. }  
  9.   
  10. //饿汉式单例2  
  11. class Singleton{  
  12.     private static class Single{  
  13.         static final Singleton instance = new Singleton();  
  14.     }  
  15.     private Singleton(){}  
  16.     public static Singleton getInstance(){  
  17.         return Single.instance;  
  18.     }  
  19. }  

 

二,懒汉式单例

Java代码   收藏代码
  1. //懒汉式单例  
  2. public class Singleton2 {  
  3.     private static Singleton2 instance = null;  
  4.     private Singleton2(){}  
  5.     public static synchronized Singleton2 getInstance(){  
  6.         if(instance == null){  
  7.             instance = new Singleton2();  
  8.         }  
  9.         return instance;  
  10.     }  
  11. }  

 

三,DCL双重锁检测式单例

Java代码   收藏代码
  1. //DCL双重锁检测式单例  
  2. public class Singleton3 {  
  3.     private volatile static Singleton3 instance = null;  
  4.     private Singleton3(){}  
  5.     public static Singleton3 getInstance(){  
  6.         if(instance == null){  
  7.             synchronized(Singleton3.class){  
  8.                 if(instance == null){  
  9.                     instance = new Singleton3();  
  10.                 }  
  11.             }  
  12.         }  
  13.         return instance;  
  14.     }  
  15. //参考文章:http://www.ibm.com/developerworks/cn/java/j-dcl.html  
  16. }  

 

 

四,登记式单例

Java代码   收藏代码
  1. import java.lang.reflect.Constructor;  
  2. import java.util.HashMap;  
  3. import java.util.Map;  
  4.   
  5. //登记式单例  
  6. public class Singleton4 {  
  7.     private  static final Map<String,Singleton4> instances =  
  8.             new HashMap<String,Singleton4>();  
  9.     static{  
  10.         Singleton4 instance = new Singleton4();  
  11.         instances.put(instance.getClass().getName(), instance);  
  12.     }  
  13.     protected Singleton4(){}  
  14.     public static synchronized Singleton4 getInstance(String name){  
  15.         if(name == null){  
  16.             name = Singleton4.class.getName();  
  17.         }  
  18.         if(instances.get(name) == null){  
  19.             try {  
  20.                 Constructor con = Class.forName(name).getDeclaredConstructor();  
  21.                 con.setAccessible(true);  
  22.                 instances.put(name, (Singleton4)con.newInstance());  
  23.             } catch (Exception e) {  
  24.                 e.printStackTrace();  
  25.             }  
  26.         }  
  27.         return instances.get(name);  
  28.     }  
  29. //参考文章:http://www.cnblogs.com/whgw/archive/2011/10/05/2199535.html  
  30. }  
分享到:
评论

相关推荐

    单例模式.ppt

    单例模式,您能写出几个呢?这个PPT将为你全面阐述5种不同形式的单例模式。

    Java设计模式之单例模式及其应用

     二、单例模式的几种形式  1. 饿汉式单例 public class Singleton { private static final Singleton singleton= new Singleton(); private Singleton(){ } public Singleton getSingleton(){ return sin

    设计模式之单例模式.md

    设计模式之单例模式,单列模式的几种实现形式,以及其优缺点,还有就是示例,对初步了解单列模式的有所帮助

    Python单例模式实例详解

    主要介绍了Python单例模式,结合实例形式分析了单例模式的概念、实现与使用方法、已经相关注意事项,需要的朋友可以参考下

    C#中单例的实现方法

    主要介绍了C#中单例的实现方法,以实例形式分析了C#中单例的原理与实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下

    PHP常用的三种设计模式

    一个单例类应包括以下几点: 和普通类不同,单例类不能被直接实例化,只能是由自身实例化。因此,要获得这样的限制效果,构造函数必须标记为private。 要让单例类不被直接实例化而能起到作用,就必须为其提供这样的...

    常用开发模式讲解.zip

    下面介绍几种常用的设计模式,包括单例模式、工厂模式、观察者模式、建造者模式、原型模式、适配器模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式和策略模式。 单例模式(Singleton Pattern) 单例模式...

    23种设计模式知识要点.zip

    这份学习资料以压缩包的形式呈现,文档分别介绍了一种设计模式的相关要点和使用方法。每个文档都包含以下几个部分: 模式简介:介绍该设计模式的定义、特点和适用场景。 结构图:展示该设计模式的结构图,帮助读者更...

    java面试题

    27. XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式? 14 28. JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么? 15 29. Anonymous Inner Class (匿名内部类) 是否可以extends...

    C#23种设计模式_示例源代码及PDF

    单例模式: 而且自行实例化并向整个系统提供这个实 单例模式 单例模式确保某一个类只有一个实例, 例单例模式。单例模式只应在有真正的“单一实例”的需求时才可使用。 结构型模式 6、ADAPTER —在朋友聚会上碰到...

    二十三种设计模式【PDF版】

    有几种画法?艺术大家通常是创造出自己的套路,比如明末清初,水墨画法开始成熟,这时画树就不用勾勒这个模式了,而是一笔 下去,浓淡几个叶子,待毛笔的水墨要干枯时,画一下树干,这样,一个活生写意的树就画出来. 我上面...

    java 面试题 总结

    异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的...

    mongo4j:一个mongoose插件,用于自动维护neo4j中的节点和关系

    为此,已经编写了几个插件和程序,其中包括 , 和 。 这些是很好的解决方案,但我发现自己对这些解决方案并不完全满意。 例如,文档管理器需要另一个应用程序层来安装和运行它。 其他两个解决方案要么已过时,要么...

    超级有影响力霸气的Java面试题大全文档

     异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获...

    java设计模式选择题复习题.doc

    为什么 MVC不是设计模式,应该是框架/架构模式,因为它的定义是抽象的,没有足够的细节描 述使你直接去实现,而只能根据MVC的概念和思想,用几个设计模式组合实现。 举出一个生活中使用装饰者模式的例子,用程序实现...

    Java范例开发大全 (源程序)

     实例156 Singleton单例模式 242  实例157 招聘(简单工厂模式) 243  实例158 同学聚会(工厂方法模式) 244  实例159 图书展(抽象工厂模式) 246  实例160 汽车适配器(Adapter适配器模式) 248  8.4 ...

    java范例开发大全(pdf&源码)

    实例156 Singleton单例模式 242 实例157 招聘(简单工厂模式) 243 实例158 同学聚会(工厂方法模式) 244 实例159 图书展(抽象工厂模式) 246 实例160 汽车适配器(Adapter适配器模式) 248 8.4 垃圾回收 250 实例...

Global site tag (gtag.js) - Google Analytics