单例设计模式
//立即加载方式=饿汉模式
public class MyObject {
//立即加载方式=饿汉模式
private static MyObject myObject=new MyObject();
private MyObject(){
}
public static MyObject getInstance(){
return myObject;
}
}*/
//延迟加载 懒汉模式
该模式是错误的,无法实现单利模式
public class MyObject {
//延迟加载 懒汉模式
private static MyObject myObject;
private MyObject(){
}
public static MyObject getInstance(){
//延迟加载
if(myObject==null){
myObject=new MyObject();
}
return myObject;
}
}
public class MyObject {
//延迟加载 改进 但是效率很低
private static MyObject myObject;
private MyObject(){
}
synchronized public static MyObject getInstance(){
//延迟加载
if(myObject==null){
myObject=new MyObject();
}
return myObject;
}
}
//等同于上一种方法 效率极低
public class MyObject {
//延迟加载 改进 但是效率很低
private static MyObject myObject;
private MyObject(){
}
public static MyObject getInstance(){
//延迟加载
synchronized (MyObject.class){
if(myObject==null){
myObject=new MyObject();
}
}
return myObject;
}
}
//使用DCL双检查锁机制
public class MyObject {
//延迟加载 改进 但是效率很低
private static MyObject myObject;
private MyObject(){
}
public static MyObject getInstance(){
//延迟加载
if(myObject==null){
synchronized (MyObject.class){
if(myObject==null){
myObject=new MyObject();
}
}
}
return myObject;
}
}
//使用内部静态类 内部静态类的初始化方法只会被执行一次
public class MyObject {
//延迟加载 改进 但是效率很低
private static class MyObjectHandler{
private static MyObject myObject=new MyObject();
}
private MyObject(){
}
public static MyObject getInstance(){
//延迟加载
return MyObjectHandler.myObject;
}
}