单例模式的定义
定义:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
单例模式的优缺点及应用场景
优点
- 在内存中只有一个实例,减少内存开支,特别适用于一个对象需要频繁地创建销毁。
- 避免对资源的多重占用。
缺点
- 单例模式扩展困难。
- 不利于测试。
应用场景
创建一个对象需要耗费大量资源,如访问IO和数据库资源等。
示例代码
//通用代码
public class SingletonA{
private static SingletonA instance = new SingletonA();
private SingletonA(){
}
public static SingletonA getInstance(){
return instance;
}
}
/*
* 懒汉式单例 线程安全 但效率影响
* */
public class Singleton
{
private static Singleton istance = null;
private Singleton(){}
//给整个方法加锁
public static synchronized Singleton getInstance()
{
if(istance ==null)
{
istance = new Singleton();
}
return istance;
}
}
/*
* 双锁模式 保证高性能且安全
* */
public class SingletonDCL
{
//volatile保证可见性
private volatile static SingletonDCL instance;
private SingletonDCL(){}
public static SingletonDCL getInstance()
{
if(instance == null)
{
synchronized (SingletonDCL.class)
{
if(instance ==null)
{
instance = new SingletonDCL();
}
}
}
return instance;
}
}