0
点赞
收藏
分享

微信扫一扫

【设计模式】单例模式——单例模式变体之“多例模式”

所谓“多例模式”并不在GoF的23种设计模式之内,是单例模式中的一种特例,在很多资料中也被称为单例模式的容器式实现。“多例模式”可以理解为在一定数量范围内创建类的多个实例(简称“说法一”);还有一层理解就是不同类型的对象可以创建多个,但相同类型的对象只能创建一个(简称“说法二”)。

说法一

先看代码:

public class Multition {
    private Multition() {}
    private static final int COUNT = 5;
    private static Map<String,Object> ioc = new ConcurrentHashMap<String,Object>();

    static {
        for (int i = 0; i < COUNT; i++) {
            ioc.put(""+i,new Multition());
        }
    }
    public static Object getInstance(String name){
        synchronized (ioc){
            return ioc.get(name);
        }
    }
}

这种写法提供了一种灵活、可控制实例数量的解决方案。我们可以通过合理使用多例模式避免资源的浪费,提高系统的性能和可扩展性。但是需要注意,多例模式的设计需要根据具体情况进行调整,确保在不同场景下创建适当数量的实例。

说法二

先看代码:

public class Multition {
    private Multition() {}
    private static Map<String,Object> ioc = new ConcurrentHashMap<String,Object>();
    public static Object getInstance(String className){
        synchronized (ioc){
            if (!ioc.containsKey(className)){
                Object obj = null;
                try{
                    obj = Class.forName(className).getNestHost();
                    ioc.put(className,obj);
                }catch (Exception e){
                    e.printStackTrace();
                }
                return obj;
            }
            return ioc.get(className);
        }
    }
}

这种写法适用于需要大量创建单例对象的场景,便于管理,但因为用到了反射,所以对性能有一定的影响。

举报

相关推荐

0 条评论