原文地址:http://forestqqqq.iteye.com/blog/1896723
一,饿汉式单例
- //饿汉式单例1
- public class Singleton1 {
- private static final Singleton1 instance = new Singleton1();
- private Singleton1(){}
- public static Singleton1 getInstance(){
- return instance;
- }
- }
- //饿汉式单例2
- class Singleton{
- private static class Single{
- static final Singleton instance = new Singleton();
- }
- private Singleton(){}
- public static Singleton getInstance(){
- return Single.instance;
- }
- }
二,懒汉式单例
- //懒汉式单例
- public class Singleton2 {
- private static Singleton2 instance = null;
- private Singleton2(){}
- public static synchronized Singleton2 getInstance(){
- if(instance == null){
- instance = new Singleton2();
- }
- return instance;
- }
- }
三,DCL双重锁检测式单例
- //DCL双重锁检测式单例
- public class Singleton3 {
- private volatile static Singleton3 instance = null;
- private Singleton3(){}
- public static Singleton3 getInstance(){
- if(instance == null){
- synchronized(Singleton3.class){
- if(instance == null){
- instance = new Singleton3();
- }
- }
- }
- return instance;
- }
- //参考文章:http://www.ibm.com/developerworks/cn/java/j-dcl.html
- }
四,登记式单例
- import java.lang.reflect.Constructor;
- import java.util.HashMap;
- import java.util.Map;
- //登记式单例
- public class Singleton4 {
- private static final Map<String,Singleton4> instances =
- new HashMap<String,Singleton4>();
- static{
- Singleton4 instance = new Singleton4();
- instances.put(instance.getClass().getName(), instance);
- }
- protected Singleton4(){}
- public static synchronized Singleton4 getInstance(String name){
- if(name == null){
- name = Singleton4.class.getName();
- }
- if(instances.get(name) == null){
- try {
- Constructor con = Class.forName(name).getDeclaredConstructor();
- con.setAccessible(true);
- instances.put(name, (Singleton4)con.newInstance());
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- return instances.get(name);
- }
- //参考文章:http://www.cnblogs.com/whgw/archive/2011/10/05/2199535.html
- }
相关推荐
单例模式,您能写出几个呢?这个PPT将为你全面阐述5种不同形式的单例模式。
二、单例模式的几种形式 1. 饿汉式单例 public class Singleton { private static final Singleton singleton= new Singleton(); private Singleton(){ } public Singleton getSingleton(){ return sin
设计模式之单例模式,单列模式的几种实现形式,以及其优缺点,还有就是示例,对初步了解单列模式的有所帮助
主要介绍了Python单例模式,结合实例形式分析了单例模式的概念、实现与使用方法、已经相关注意事项,需要的朋友可以参考下
主要介绍了C#中单例的实现方法,以实例形式分析了C#中单例的原理与实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
一个单例类应包括以下几点: 和普通类不同,单例类不能被直接实例化,只能是由自身实例化。因此,要获得这样的限制效果,构造函数必须标记为private。 要让单例类不被直接实例化而能起到作用,就必须为其提供这样的...
下面介绍几种常用的设计模式,包括单例模式、工厂模式、观察者模式、建造者模式、原型模式、适配器模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式和策略模式。 单例模式(Singleton Pattern) 单例模式...
这份学习资料以压缩包的形式呈现,文档分别介绍了一种设计模式的相关要点和使用方法。每个文档都包含以下几个部分: 模式简介:介绍该设计模式的定义、特点和适用场景。 结构图:展示该设计模式的结构图,帮助读者更...
27. XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式? 14 28. JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么? 15 29. Anonymous Inner Class (匿名内部类) 是否可以extends...
单例模式: 而且自行实例化并向整个系统提供这个实 单例模式 单例模式确保某一个类只有一个实例, 例单例模式。单例模式只应在有真正的“单一实例”的需求时才可使用。 结构型模式 6、ADAPTER —在朋友聚会上碰到...
有几种画法?艺术大家通常是创造出自己的套路,比如明末清初,水墨画法开始成熟,这时画树就不用勾勒这个模式了,而是一笔 下去,浓淡几个叶子,待毛笔的水墨要干枯时,画一下树干,这样,一个活生写意的树就画出来. 我上面...
异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的...
为此,已经编写了几个插件和程序,其中包括 , 和 。 这些是很好的解决方案,但我发现自己对这些解决方案并不完全满意。 例如,文档管理器需要另一个应用程序层来安装和运行它。 其他两个解决方案要么已过时,要么...
异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获...
为什么 MVC不是设计模式,应该是框架/架构模式,因为它的定义是抽象的,没有足够的细节描 述使你直接去实现,而只能根据MVC的概念和思想,用几个设计模式组合实现。 举出一个生活中使用装饰者模式的例子,用程序实现...
实例156 Singleton单例模式 242 实例157 招聘(简单工厂模式) 243 实例158 同学聚会(工厂方法模式) 244 实例159 图书展(抽象工厂模式) 246 实例160 汽车适配器(Adapter适配器模式) 248 8.4 ...
实例156 Singleton单例模式 242 实例157 招聘(简单工厂模式) 243 实例158 同学聚会(工厂方法模式) 244 实例159 图书展(抽象工厂模式) 246 实例160 汽车适配器(Adapter适配器模式) 248 8.4 垃圾回收 250 实例...