public class OneDemoTest {
public static void main(String[] args) {
OneDome o1=OneDome.GetOneDemo();
OneDome o2=OneDome.GetOneDemo();
//验证o1 o2为同一实例
System.out.println(o1==o2);//true
System.out.println("-----------------------------------");
//验证o3 o4为同一实例
Code o3= Code.GetOneDemo();
Code o4= Code.GetOneDemo();
System.out.println(o3==o4);//true
}
}
/**
* 饿汉式
*/
class OneDome{
// 1.私有化构造器
private OneDome(){
}
//2.内部提供一个当前类的实例
//4.此实例也必须静态化
private static OneDome instance =new OneDome();
//3.提供公共的静态的方法,返回当前类的对象
public static OneDome GetOneDemo(){
return instance;
}
}
/**
* 懒汉式
*/
class Code{
// 1.私有化构造器
private Code(){
}
//2.声明当前类对象,没初始化
//4.此对象也必须声明为static的
private static Code ininstance=null;
//3.声明public、static的返回当前类对象的方法
public static Code GetOneDemo(){
//synchronized解决线程安全问题
Object obj=new Object();
synchronized(obj){
if (ininstance == null) {
ininstance = new Code();
}
}
return ininstance;
}
}
两种方式的对比:
饿汉式:
坏处:对象加载时间过长。
好处:饿汉式是线程安全的(懒汉式已解决线程安全问题)
懒汉式:好处:延迟对象的创建。