单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例 。
其又分为三种形式
饿汉式,懒汉式,双重锁式
首先是饿汉式
public class SpUtils{
//在自己内部定义自己的一个实例,只供内部调用
private static final SpUtils spUtils= new SpUtils();
private SpUtils(){
}
//这里提供了一个供外部访问本class的静态方法,可以直接访问获得本类初始化对象
public static SpUtils getInstance(){
return spUtils;
}
}
然后是懒汉式
private static SpUtils spUtils= null;
public static synchronized SpUtils getsp() {
// 这个方法,不用每次都进行生成对象,只有第一次生成对象
// 使用时生成实例,提高了效率!
if (spUtils == null)
spUtils = new SpUtils();
return spUtils;
}
双重锁式
//将同步内容下方到if内部,提高了执行的效率,不必每次获取对象时都进行同步,只有第一次才同步,创建了以后就没必要了。
private static volatile SpUtils spUtils=null;
private SpUtils(){}
public static SpUtils getsp(){
if(spUtils==null){
synchronized(SpUtils .class){
if(spUtils==null){
spUtils=new SpUtils();
}
}
} return spUtils;}
优点
实例控制:Singln 会阻止其他对象实例化其自己的 Singln 对象的副本,从而确保所有对象都访问唯一实例
灵活性:因为类控制了实例化过程,所以类可以更加灵活修改实例化过程
缺点
开销:虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例,将仍然需要一些开销,可以通过使用静态初始化解决此问题。