最佳单例

三种单例,推荐枚举型单例
第一种:


package ch1;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * 静态公共final单例
 * 
 * 
 * @author fck
 * @since v0.4.6
 * @created 2014年3月11日 下午2:02:18
 */
public class SingletonOne {
public static final SingletonOne INSTANCE = new SingletonOne();

private SingletonOne() {
    // 不可由外部调用
    // 但是无法防止反射
    count = new AtomicInteger(1);
}

private AtomicInteger count = null;

public void sayhi() {
    System.out.println(count.getAndIncrement());

}

public static void main(String args[]) {
    SingletonOne.INSTANCE.sayhi();
    SingletonOne.INSTANCE.sayhi();
    SingletonOne.INSTANCE.sayhi();
    SingletonOne.INSTANCE.sayhi();

}
}

第二种:

package ch1;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * 通过getInstance获取实例的单例
 * 
 * 
 * @author fck
 * @since v0.4.6
 * @created 2014年3月11日 下午2:01:56
 */
public class SingletonTwo {
private static final SingletonTwo INSTANCE = new SingletonTwo();

private SingletonTwo() {
    // 不可由外部调用
    // 但是无法防止反射
    count = new AtomicInteger(1);
}

private AtomicInteger count = null;

public void sayhi() {
    System.out.println(count.getAndIncrement());

}

public static SingletonTwo getInstance() {
    return INSTANCE;
}

public static void main(String[] args) {
    SingletonTwo.getInstance().sayhi();
    SingletonTwo.getInstance().sayhi();
    SingletonTwo.getInstance().sayhi();
    SingletonTwo.getInstance().sayhi();
    SingletonTwo.getInstance().sayhi();

}

}

第三种:

package ch1;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * 
 * 
 * 枚举型的单例
 * 
 * @author fck
 * @since v0.4.6
 * @created 2014年3月11日 下午1:58:24
 */
public enum SingletonEnum {
INSTANCE(1);

private SingletonEnum(int c) {
    count = new AtomicInteger(c);
}

private AtomicInteger count = null;

public void sayhi() {
    System.out.println(count.getAndIncrement());

}

}


package ch1;

public class RunSingletonEnum {

public static void main(String[] args) {
    SingletonEnum.INSTANCE.sayhi();
    SingletonEnum.INSTANCE.sayhi();
    SingletonEnum.INSTANCE.sayhi();
    SingletonEnum.INSTANCE.sayhi();

}

}

你可能感兴趣的:(最佳单例)