今天回过头补充一下单例模式的博文
单例模式,顾名思义,一个类它只有一个实例。
固,单例模式不应该对外提供构造方法,于是其应具备自行实例化的特点,并向整个系统提供这个实例。
言之至此,我们大概已经可以窥探到单例模式的实现方式:
1、构造方法为私有方法(即不对外提供构造方法)
2、该类需要一个静态私有的对象
3、需要一个静态公有方法获取上述对象。
其应用场景主要如下:
1) 资源管理常常设计为单例模式,因为需要读取配置文件,应带由一个对象来管理一个属性文件。
2) 利用单例模式设计缓存机制,将多次生成的文件、对象存放在单例的成员变量中,成员变量可以是容器,Map等。
优点:方便控制实例化过程,节约内存。
缺点:打破java的设计原则,打破多态,不能被继承。
单例模式的实现1:
class Singleton {
//利用静态模块在JVM中优先加载的原则,解决每次请求对象实皆要检查实例对象是否已经存在的开销问题
private static Singleton singleton = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return singleton;
}
}
单例模式的实现2:
class Singleton {
private static Singleton singleton = null;
private Singleton(){}
public synchronized static Singleton getInstance(){
if(singleton == null) singleton = new Singleton();
return singleton;
}
}
synchronized加在方法上锁的粒数太多,可以继续优化如下:
class Singleton {
private static Singleton singleton = null;
private Singleton(){}
public static Singleton getInstance(){
if(singleton == null){
synchronized (Singleton.class) {
singleton = new Singleton();
}
}
return singleton;
}
}