一. 单例模式定义:
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
二. 结构和说明:
Singleton负责创建Singleton类自己的唯一实例,并提供一个getInstance方法,让外部来访问这个类的唯一实例。
三. 调用示例图:
实现代码:http://blog.csdn.net/zdp072/article/details/44425993
四. 控制实例个数:
简单演示如何扩展单例模式,控制实例数目为3个
public class OneExtend {
// 定义一个缺省的key值的前缀
private final static String DEFAULT_PREFIX = "Cache";
// 用来记录当前正在使用第几个实例,到了控制的最大数目,就返回从1开始
private static int num = 1;
// 定义控制实例的最大数目
private final static int NUM_MAX = 3;
// 缓存实例的容器
private static Map<String, OneExtend> map = new HashMap<String, OneExtend>();
private OneExtend() {
}
public static OneExtend getInstance() {
String key = DEFAULT_PREFIX + "_" + num;
OneExtend oneExtend = map.get(key);
if (oneExtend == null) {
oneExtend = new OneExtend();
map.put(key, oneExtend);
}
num++; // 把当前实例的序号加1
if (num > NUM_MAX) {
num = 1; // 如果实例的序号已经达到最大数目了,那就重复从1开始获取
}
return oneExtend;
}
public static void main(String[] args) {
OneExtend t1 = getInstance();
OneExtend t2 = getInstance();
OneExtend t3 = getInstance();
OneExtend t4 = getInstance();
OneExtend t5 = getInstance();
OneExtend t6 = getInstance();
System.out.println("t1==" + t1);
System.out.println("t2==" + t2);
System.out.println("t3==" + t3);
System.out.println("t4==" + t4);
System.out.println("t5==" + t5);
System.out.println("t6==" + t6);
}
}