1、餓漢模式:
package com.abin.info.service;
public class Singleton {
private static Singleton singleton=new Singleton();
private Singleton(){
}
public static Singleton getInstance(){
return singleton;
}
}
private static LazyMode lazyMode=null;
public static synchronized LazyMode getInstance(){
if(null==lazyMode){
lazyMode=new LazyMode();
}
return lazyMode;
}
2、懶漢模式:
package com.abin.inter.she;
public class Singleton {
private static Singleton singleton=null;
private Singleton(){
}
public static Singleton getInstance(){
if(null==singleton){
return new Singleton();
}
return singleton;
}
}
懶漢模式的線程安全版本:
package com.abin.lee.template.pattern;
public class LazyMode {
private static LazyMode lazyMode=null;
public static synchronized LazyMode getInstance(){
if(null==lazyMode){
lazyMode=new LazyMode();
}
return lazyMode;
}
}
3、雙重檢測:
package com.east.abin.impl;
public class Singleton {
private static Singleton instance=null;
private Singleton(){
}
public static Singleton getInstance(){
if(null==instance){
synchronized(Singleton.class){
if(null==instance){
instance=new Singleton();
return instance;
}
}
}
return instance;
}
}
4.靜態內部類:
單例模式創新!google的ioc作者寫的。只有在調用的時候才會初始化!而且線程安全
超級牛!
package com.east.abin.bin;
public class Singleton {
private Singleton(){
}
private static class SingletonHelp{
private static Singleton instance=new Singleton();
}
public static Singleton getInstance(){
return SingletonHelp.instance;
}
}
5、enum類型的(這個是針對jdk 1.5以及1.5版本以上的)
package com.abin.peng.service;
public enum Singleton {
Singleton;
private Singleton(){}
public static Singleton getInstance(){
return Singleton;
}
}