方式一 :
public class Singleton {
//构造方法必须是私有的
private Singleton(){}
//在自己内部定义自己一个实例
//private 只供内部调用
private static Singleton instance = new Singleton();
//提供一个供外部访问本class的静态方法,可以直接访问
public static Singleton getInstance() {
return instance;
}
}
方式二 : 滞后初始化
public class Singleton {
private static Singleton instance = null;
// 这里的static非常重要,如果为对象变量则因为存在多份拷贝而起不到限制的作用
private static Object classLock = Singleton.class;
public static Singleton getInstance() {
//不用每次都进行生成对象,只是第一次
//使用时生成实例!
synchronized(classLock){
if (instance==null)
instance=new Singleton();
return instance;
}
}
}
}
调用getInstance()方法的时候可以向方法中传递参数。
·单例模式类不能实现Clonable接口,以防被克隆而产生多个实例
·单例模式类不能实现Serializable接口,以防被序列化而产生多个实例
public class Singleton {
//构造方法必须是私有的
private Singleton(){}
//在自己内部定义自己一个实例
//private 只供内部调用
private static Singleton instance = new Singleton();
//提供一个供外部访问本class的静态方法,可以直接访问
public static Singleton getInstance() {
return instance;
}
}
方式二 : 滞后初始化
public class Singleton {
private static Singleton instance = null;
// 这里的static非常重要,如果为对象变量则因为存在多份拷贝而起不到限制的作用
private static Object classLock = Singleton.class;
public static Singleton getInstance() {
//不用每次都进行生成对象,只是第一次
//使用时生成实例!
synchronized(classLock){
if (instance==null)
instance=new Singleton();
return instance;
}
}
}
}
调用getInstance()方法的时候可以向方法中传递参数。
·单例模式类不能实现Clonable接口,以防被克隆而产生多个实例
·单例模式类不能实现Serializable接口,以防被序列化而产生多个实例