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);
    }
}

 

posted on 2019-09-01 15:01  菜鸟乙  阅读(181)  评论(0编辑  收藏  举报