设计模式之单例模式实现及其应用

本文详细解析了单例模式的两种实现方式及其应用,并通过缓存模拟展示了单例模式的变形。深入探讨了线程安全、延迟加载等关键特性,适合对Java并发编程感兴趣的开发者学习。

实现方式一:延迟加载

package singleton;

/**
 * 单例模式(实现方式一) 
 * 特点:在调用方法的时候创建对象,这种是线程不安全的。
 * 此种方式的应用:延迟加载
 * 
 * @author liyulin
 * 
 * @version 1.0 2013-9-6 下午7:13:44
 * 
 */
public class SingletonDemo1 {

	// 4、用来保存自己的类实例
	private static SingletonDemo1 singletonDemo = null;

	// 1、收回外部能够new singletonDemo()的权限
	private SingletonDemo1() {

	}

	// 2、主动给外部调用自己的实例
	public static SingletonDemo1 getInstance() {
		// 3、控制内部调用构造函数的次数
		// 5、只在第一次调用的时候new一个
		if (singletonDemo == null) {
			singletonDemo = new SingletonDemo1();
		}
		return singletonDemo;
	}
}

实现方式二

package singleton;

/**
 * 单例模式(实现方式二) 
 * 特点:在加载类的时候创建对象,这种是线程安全的。
 * 
 * @author liyulin
 * 
 * @version 1.0 2013-9-6 下午7:13:44
 * 
 */
public class SingletonDemo2 {

	private static SingletonDemo2 singletonDemo2 = null;

	// 3、控制外部调用构造方法的次数
	static {
		singletonDemo2 = new SingletonDemo2();
	}

	// 1、回收外部能够new SingletonDemo2()的权限
	private SingletonDemo2() {

	}

	// 2、主动给外部提供自己的实例
	public static SingletonDemo2 getInstance() {
		return singletonDemo2;
	}
}

缓存模拟;单例模式的变形:

package singleton;

import java.util.HashMap;
import java.util.Map;

/**
 * 缓存模拟;单例模式的变形:三例
 * 
 * @author liyulin
 * 
 * @version 1.0 2013-9-6 下午7:42:30
 * 
 */
public class Cache {

	// 1、定义缓存数据的容器
	private static Map<Object, Object> map = new HashMap<Object, Object>();

	private Cache() {

	}

	// 模拟缓存
	public static Cache getCache() {
		// 2、到缓存里面查找需要使用的数据
		Cache cache = (Cache) map.get("data");

		// 3、如果找不到
		if (cache == null) {
			// 3.1、就新建一个数据(或者获取一个数据)
			cache = new Cache();
			// 3.2、然后把新建的数据设置到缓存中
			map.put("data", cache);
		}

		// 4、如果找到了就直接使用
		return cache;
	}
	
	
	/*---------------------------------- 控制三个实例 ----------------------------------*/ 
	// 用来记录当前正在使用哪一个实例,初始值为1
	private static int num = 1;
	// 实例的总个数为3个
	private static int count = 3;
	
	public static Cache getCache2() {
		Cache cache = (Cache) map.get(num);

		if (cache == null) {
			cache = new Cache();
			map.put(num, cache);
		}

		num++;
		if(num > count){
			num = 1;
		}
		return cache;
	}
}


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值