SingleTon Design Pattern

来源:互联网 发布:考淘宝运营 证书 编辑:程序博客网 时间:2024/05/18 01:24

 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;
 
}