几乎每次面试,面试官都会抛过来一张纸说:实现一个单例。那么结合网上的资料,总结一下单例模式好了。
概念介绍:确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例;Java中单例模式是一种常见的设计模式,常见的单例模式的写法有懒汉式单例、饿汉式单例。
单例核心思想:这个类只能有一个实例,实例的唯一一次创建在类内部完成。同时提供public的getInstance方法,供外界使用本单例。
懒汉式:
饿汉式
</pre><p><span style="color:#362E2B;"></span></p><p><span style="color:#362E2B;">通过私有化构造函数和提供公用的getInstance</span>方法,实现了一个类只能创建一次的目的。</p><p><span style="color:#362E2B;">然而这样的写法是非线程安全的,可以进行以改造:</span></p><p><span style="color:#362E2B;">1. </span><span style="color:#362E2B;">同步</span><span style="color: rgb(54, 46, 43);">getInstance</span>();</p><p><span style="color:#362E2B;"></span></p><pre name="code" class="java">
2. 双重检查加同步代码块
public Singleton getInstance(){
if(instance=null){
synchronized(Singleton.class){
if(instance=null){
instance==new Singleton();
}
}
return instance;
}
3. 静态内部类的方法(参见http://blog.csdn.net/jason0539/article/details/23297037)
publicclass Singleton {
private static class LazyHolder {
private static final Singleton INSTANCE= new Singleton();
}
private Singleton (){}
public static final Singleton getInstance(){
return LazyHolder.INSTANCE;
}
}