(一)简介
单例模式是一种常见的软件设计模式,顾名思义,他对外只暴露一个实例对象的引用,有一个私有的构造方法,一个公共的对外获取该类实例的静态方法。
(二)写法
1.静态常量
public class Demo{
private final static Demo sInstance = new Demo();
private Demo(){
}
public static getInstance(){
return sInstance ;
}
}
优点:写法简单,类加载的时候实例化就完成了,外部直接获取就行,避免了线程同步。
缺点:同样的,类加载时就完成了实例化,没有做到懒加载,如果该实例从未使用,则造成资源浪费。
2.静态代码块
public class Demo{
private static Demo sInstance;
static{
sInstance = new Demo();
}
private Demo(){}
public static Demo getInstance(){
return sInstance;
}
}
优缺点同上。
3.同步代码块
public class Demo{
private static Demo sInstace;
private Demo(){}
public static Demo getInstace(){
if(sInstace == null){
synchronized(Demo.class){
if(sInstace == null){
sIntance = new Demo();
}
}
return sInstance;
}
}
}
4.静态内部类
public class Demo{
private Demo(){}
private static class DemoInstance{
private static final Demo INSTACE = new Demo();
}
public static Demo getInstance(){
return DemoInstance.INSTACE;
}
}