1 课程讲解
1.1 应用场景
2 代码演练
1.1 容器单例
1 课程讲解
1.1 应用场景
应用于在程序初始化的时候把多个单例对象放入到singletonMap中,使用的时候直接通过key获取对象。可以应用在懒汉模式中,不适用于饿汉模式(饿汉模式由于每次都要重新初始化会出现多线程安全问题)
使用hashtable会线程安全,但是由于其同步锁,会影响性能。
2 代码演练
1.1 容器单例
test类:
package com.geely.design.pattern.creational.singleton; public class Test2 { public static void main(String [] args){ ContainerSingleton.putInstance("key",new Object()); Object containerSingleton = ContainerSingleton.getInstance("key"); System.out.println(containerSingleton.getClass().getName()); } }
容器单例实体类:
package com.geely.design.pattern.creational.singleton; import java.util.HashMap; import java.util.Map; public class ContainerSingleton { /** * 私有构造器,防止外部类实例化该类 */ private ContainerSingleton(){ } private static Map<String,Object> singletonMap = new HashMap<String,Object>(); /** * map赋值,赋值单例对象 * @param key * @param instance */ public static void putInstance(String key,Object instance){ if(!"".equals(key)&&instance != null){ if(!singletonMap.containsKey(key)){ singletonMap.put(key, instance); } } } /** * 留着口子外部调用 * @return */ public static Object getInstance(String key){ return singletonMap.get(key); } }
诸葛