SingleTon Design Pattern

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

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值