本文主要是介绍《研磨设计模式》chap5 单例模式singleton,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1. 模式介绍
1.1 饱汉式单例实现
public class Singleton {//定义一个变量来存储创建好的类实例 private static Singleton uniqueInstance = null;private Singleton(){//}//定义一个方法来为客户端提供类实例 public static synchronized Singleton getInstance(){//判断存储实例的变量是否有值if(uniqueInstance == null){//如果没有,就创建一个类实例,并把值赋值给存储类实例的变量uniqueInstance = new Singleton();}//如果有值,那就直接使用return uniqueInstance;}
}
1.2 饿汉式单例实现
public class Singleton {//定义一个变量来存储创建好的类实例,直接在这里创建类实例,只会创建一次 private static Singleton uniqueInstance = new Singleton();
}
2. 线程安全?
3. 扩展单例
有多个单例。
public class OneExtend {//定义一个缺省的key值的前缀 private final static String DEFAULT_PREKEY = "Cache";//缓存实例的容器 private static Map<String,OneExtend> map = new HashMap<String,OneExtend>();//用来记录当前正在使用第几个实例,到了控制的最大数目,就返回从1开始 private static int num = 1;private final static int NUM_MAX = 3; //定义控制实例的最大数目private OneExtend(){}public static OneExtend getInstance(){String key = DEFAULT_PREKEY+num;OneExtend oneExtend = map.get(key);if(oneExtend==null){oneExtend = new OneExtend();map.put(key, oneExtend);}//把当前实例的序号加1num++;if(num > NUM_MAX){//如果实例的序号已经达到最大数目了,那就重复从1开始获取num = 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);}
}
这篇关于《研磨设计模式》chap5 单例模式singleton的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!