两种方式的简单实现
//饿汉式
class Hungry{
//类的构造器私有化
private Hungry(){
}
//在类的内部创建当前的类的实例
//此属性必须声明为static
private static Hungry instance=new Hungry();
//使用getxxx()方法获取但前类的实例,必须声明为static
public static Hungry getInstance(){
return instance;
}
}
//懒汉式
class Lazy{
//类的构造器私有化
private Lazy(){
}
//在类的内部声明当前的类的实例
//此属性必须声明为static
private static Lazy instance=null;
//使用getxxx()方法获取但前类的实例,如果未创建,则在方法内部创建,必须声明为static
public static Lazy getInstance(){
if (instance==null){
instance=new Lazy();
}
return instance;
}
}
对比两种模式:
特点:
饿汉式:“立即加载”,随着类的加载,当前的唯一实例就创建了
懒汉式:“延迟加载”,在需要使用的时候进行创建
优缺点:
饿汉式:
优点:写法简单,在内存中较早加载,使用更方便,更快,是线程安全的。
缺点:内存中占用时间较长。
懒汉式:
优点:在需要的时候进行创建,节省内存空间。
缺点:线程不安全。