単一例パターンまとめ
5229 ワード
単一例パターンまとめ
http://hi.baidu.com/donlian/item/b746f074655ee93e704423f0
Java 。 。
, , :
:
Java
public class Singleton {
private static final Singleton instance = new Singleton();
/**
* new
*/
private Singleton(){
System.out.println("init");
}
public static Singleton getInstance(){
return instance;
}
}
, , , 。 , , , 。
, ,
:
Java
public class Singleton {
private static Singleton instance = null;
/**
* new
*/
private Singleton(){
System.out.println("init");
}
public static Singleton getInstance(){
if(instance == null){
instance = new Singleton();
}
return instance;
}
}
, 。 , , , 。
, , ( , )。 , 。
:
Java
public class Singleton {
private static Singleton instance = null;
/**
* new
*/
private Singleton(){
System.out.println("init");
}
public static synchronized Singleton getInstance(){
if(instance == null){
instance = new Singleton();
}
return instance;
}
}
synchronized, 。 , , , ,synchronized , , , synchronized 。
, 。 :
:
Java
public class Singleton {
private static Singleton instance = null;
/**
* new
*/
private Singleton(){
System.out.println("init");
}
public static Singleton getInstance(){
if(instance == null){
synchronized(Singleton.class){
if(instance == null){
instance = new Singleton();
}
}
}
return instance;
}
}
, , , , , , 。
? 。 , , synchronied , Singleton 。 。 ,instance , , instance , instance , instance 。
java5 , instance volatile , 。
, , Java Concurrency In Practice List 16.6 :
:
Java
public class Singleton {
private static class SingletonHolder {
public static Singleton resource = new Singleton();
}
public static Singleton getResource() {
return SingletonHolder.resource ;
}
private Singleton(){
}
}
, , , , , 。
, , effective Java :
:
Java
public class Singleton {
public static final Singleton INSTANCE = new Singleton();
private Singleton(){}
public void method(){
//...
}
public static void main(String[] a){
// 。
Singleton.INSTANCE.method();
}
}
:
Java
/**
*
*/
public enum Singleton {
INSTANCE;
public void method(){
//...
}
public static void main(String[] a){
// 。
Singleton.INSTANCE.method();
}
}
, , volatile , 。
:
Java
public class Singleton {
private static volatile Singleton instance = null;
/**
* new
*/
private Singleton(){
System.out.println("init");
}
public static Singleton getInstance(){
if(instance == null){
synchronized(Singleton.class){
if(instance == null){
instance = new Singleton();
}
}
}
return instance;
}
}
, spring , ,spring bean 。 app , 。 , , 。
回転:http://hi.baidu.com/donlian/item/b746f074655ee93e704423f0