最佳单例

本文介绍了三种不同的单例模式实现方式,包括静态公共final单例、通过getInstance获取实例的单例及枚举型单例,并推荐使用枚举型单例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

三种单例,推荐枚举型单例 第一种: <!-- lang: java --> 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();

}

}

转载于:https://my.oschina.net/purely/blog/207136

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值