设计模式--单件模式
2014-04-08 15:20
218 查看
单件模式:确保一个类只有一个实例,并提供一个全局访问点。
![](http://img.blog.csdn.net/20140408152007265?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQ0hTMDA3Y2hz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
采用私有构造器。
1.懒汉,线程安全
2.饿汉
3.静态内部类
4.双重校骏锁
采用私有构造器。
1.懒汉,线程安全
public class Singleton { private static Singleton instance; private Singleton (){} public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }这种学法效率低。
2.饿汉
public class Singleton { private static Singleton instance = new Singleton(); private Singleton (){} public static Singleton getInstance() { return instance; } }这种方式基于classloader机制避免了多线程的同步问题,但没有达到lazy loading的效果。
3.静态内部类
public class Singleton { private static class SingletonHolder { private static final Singleton INSTANCE = new Singleton(); } private Singleton (){} public static final Singleton getInstance() { return SingletonHolder.INSTANCE; } }这种方式也是基于classLoader机制避免了多线的同步问题,但是达到了lazy loading的效果。
4.双重校骏锁
public class Singleton { private volatile static Singleton singleton; private Singleton (){} public static Singleton getSingleton() { if (singleton == null) { synchronized (Singleton.class) { if (singleton == null) { singleton = new Singleton(); } } } return singleton; } }这种方式即线程安全,又能够使性能不受到很大的影响。并不是每次进入getInstance方法都需要同步,而是先不同步,进入方法后,先检查实例是否存在,如果不存在才进入下面的同步块,这是第一重检查。进入同步块后,再次检查实例是否存在,如果不存在,就是同步的情况下创建一个实例,这是第二重检查。
相关文章推荐
- 设计模式:单件模式
- java设计模式——单件模式
- .NET设计模式-单件模式(Singleton Pattern)
- 设计模式学习笔记(二)——Singleton单件模式
- c++设计模式:单件模式(Singleton Pattern)
- 设计模式 - 单件模式(singleton pattern) 详解
- 设计模式之-----单件(singleton)
- 设计模式-单件模式(Singleton pattern)
- 设计模式之五:单件模式(巧克力工厂锅炉 模拟流程)
- C与设计模式---单件模式
- 设计模式六:singleton单件模式——对象创建型模式
- 设计模式之---单件模式
- FreeFrame学习js设计模式之单件工厂模式
- 设计模式之——单件模式
- 设计模式之单件模式
- 设计模式(五):创建型模式—Singleton(单件)
- .NET设计模式(2):单件模式(Singleton Pattern)
- c++设计模式:单件模式(Singleton Pattern)
- [学习笔记]设计模式[4]-{单件模式}
- 设计模式笔记(2)---单件模式(创建型)