Singleton Pattern:There is only one instance in java application.
Advantage:1.Reduce memory2.Easy to do rubbish back.
The best way to implement it by enum.There are serveral functions to implement it by follow.
package com.sean.singleton;
/**
* Lazy initialize
* @author Sean_Zhang
*
*/
public class SingleTon1_1 {
//It doesn't care about concurrent.
private SingleTon1_1() {}
private static SingleTon1_1 INSTANCE = null;
public static SingleTon1_1 getInstance() {
if(INSTANCE == null) {
INSTANCE = new SingleTon1_1();
}
return INSTANCE;
}
}
/**
*
*/
package com.sean.singleton;
/**
* Lazy initialize
* @author Sean_Zhang
*
*/
public class SingleTon1_2 {
//It does do cuncurrent,but performance is bad.
private SingleTon1_2() {}
private static SingleTon1_2 INSTANCE = null;
public synchronized static SingleTon1_2 getInstance() {
if(INSTANCE == null) {
INSTANCE = new SingleTon1_2();
}
return INSTANCE;
}
}
/**
*
*/
package com.sean.singleton;
/**
* @author Sean_Zhang
*
*/
public class SingleTon1_3 {
//It does do cuncurrent,double check will cause problem
//pseudo to cause some problem(乱序会导致问题)
private SingleTon1_3() {}
private static SingleTon1_3 INSTANCE = null;
public static SingleTon1_3 getInstance() {
if(INSTANCE == null) {
synchronized(SingleTon1_3.class) {
if(INSTANCE == null) {
INSTANCE = new SingleTon1_3();
}
}
}
return INSTANCE;
}
}
package com.sean.singleton;
/**
* @author Sean_Zhang
*
*/
public class SingleTon1_4 {
//Fix pseudo
private SingleTon1_4() {}
private static SingleTon1_4 INSTANCE = null;
public static SingleTon1_4 getInstance() {
if(INSTANCE == null) {
synchronized(SingleTon1_4.class) {
SingleTon1_4 tmp = INSTANCE;
if(INSTANCE == null) {
INSTANCE = new SingleTon1_4();
}
}
}
return INSTANCE;
}
}
package com.sean.singleton;
import java.io.Serializable;
/**
* @author Sean_Zhang
*
*/
public class SingleTon1_5 implements Serializable {
private SingleTon1_5() {}
private static SingleTon1_5 INSTANCE = null;
public static SingleTon1_5 getInstance() {
if(INSTANCE == null) {
synchronized(SingleTon1_5.class) {
SingleTon1_5 tmp = INSTANCE;
if(INSTANCE == null) {
INSTANCE = new SingleTon1_5();
}
}
}
return INSTANCE;
}
}
/**
*
*/
package com.sean.singleton;
/**
* @author Sean_Zhang
*
*/
public class SingleTon2_1 {
//No Problem,But it would not same instance when multi classload.
private SingleTon2_1() {}
private static SingleTon2_1 INSTANCE = new SingleTon2_1();
public static SingleTon2_1 getInstance() {
return INSTANCE;
}
}
/**
*
*/
package com.sean.singleton;
import java.io.Serializable;
/**
* @author Sean_Zhang
*
*/
public class SingleTon2_2 implements Serializable {
// No Problem,But it would not same instance when multi classload.
private SingleTon2_2() {}
private static SingleTon2_2 INSTANCE = new SingleTon2_2();
public static SingleTon2_2 getInstance() {
return INSTANCE;
}
}
/**
*
*/
package com.sean.singleton;
/**
* @author Sean_Zhang
*
*/
public class SingleTon3_1 {
private SingleTon3_1() {}
static class SingleTonHolder {
private static SingleTon3_1 INSTANCE = new SingleTon3_1();
}
public synchronized static SingleTon3_1 getInstance() {
return SingleTonHolder.INSTANCE;
}
}
/**
*
*/
package com.sean.singleton;
import java.io.Serializable;
/**
* @author Sean_Zhang
*
*/
public class SingleTon3_2 implements Serializable {
private SingleTon3_2() {}
static class SingleTonHolder {
private static SingleTon3_2 INSTANCE = new SingleTon3_2();
}
public synchronized static SingleTon3_2 getInstance() {
return SingleTonHolder.INSTANCE;
}
}
/**
*
*/
package com.sean.singleton;
/**
* @author Sean_Zhang
*
*/
public enum SingleTon4 {
INSTANCE;
}